{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import numpy.linalg as npl\n",
    "import scipy.linalg as spl\n",
    "import sklearn.metrics as sklm\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['figure.figsize'] = [6, 6]\n",
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = \"all\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "ozone = np.array([[0.011],\n",
    "       [0.011],\n",
    "       [0.012],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.011],\n",
    "       [0.013],\n",
    "       [0.014],\n",
    "       [0.022],\n",
    "       [0.029],\n",
    "       [0.037],\n",
    "       [0.05 ],\n",
    "       [0.067],\n",
    "       [0.076],\n",
    "       [0.086],\n",
    "       [0.076],\n",
    "       [  np.nan],\n",
    "       [0.044],\n",
    "       [0.035],\n",
    "       [0.027],\n",
    "       [0.021],\n",
    "       [0.018],\n",
    "       [0.016],\n",
    "       [0.017],\n",
    "       [0.018],\n",
    "       [0.016],\n",
    "       [0.015],\n",
    "       [0.016],\n",
    "       [  np.nan],\n",
    "       [0.015],\n",
    "       [0.013],\n",
    "       [0.014],\n",
    "       [  np.nan],\n",
    "       [0.029],\n",
    "       [0.042],\n",
    "       [0.056],\n",
    "       [0.07 ],\n",
    "       [0.083],\n",
    "       [0.08 ],\n",
    "       [0.086],\n",
    "       [0.074],\n",
    "       [0.067],\n",
    "       [0.045],\n",
    "       [0.034],\n",
    "       [0.024],\n",
    "       [0.018],\n",
    "       [0.014],\n",
    "       [0.012],\n",
    "       [0.009],\n",
    "       [0.009],\n",
    "       [0.007],\n",
    "       [0.006],\n",
    "       [  np.nan],\n",
    "       [0.007],\n",
    "       [0.007],\n",
    "       [0.014],\n",
    "       [0.018],\n",
    "       [0.028],\n",
    "       [0.046],\n",
    "       [0.069],\n",
    "       [0.087],\n",
    "       [0.096],\n",
    "       [0.105],\n",
    "       [0.099],\n",
    "       [0.077],\n",
    "       [0.06 ],\n",
    "       [0.046],\n",
    "       [0.033],\n",
    "       [0.029],\n",
    "       [0.018],\n",
    "       [0.011],\n",
    "       [0.012],\n",
    "       [0.009],\n",
    "       [0.008],\n",
    "       [0.009],\n",
    "       [0.006],\n",
    "       [  np.nan],\n",
    "       [0.009],\n",
    "       [0.015],\n",
    "       [0.02 ],\n",
    "       [0.028],\n",
    "       [0.04 ],\n",
    "       [0.057],\n",
    "       [0.073],\n",
    "       [0.079],\n",
    "       [0.081],\n",
    "       [0.07 ],\n",
    "       [0.066],\n",
    "       [0.056],\n",
    "       [0.047],\n",
    "       [0.04 ],\n",
    "       [0.035],\n",
    "       [0.032],\n",
    "       [0.026],\n",
    "       [0.019],\n",
    "       [0.011],\n",
    "       [0.006],\n",
    "       [0.003],\n",
    "       [0.004],\n",
    "       [0.004],\n",
    "       [  np.nan],\n",
    "       [0.004],\n",
    "       [0.006],\n",
    "       [0.015],\n",
    "       [0.03 ],\n",
    "       [0.047],\n",
    "       [0.056],\n",
    "       [0.057],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.014],\n",
    "       [0.01 ],\n",
    "       [0.008],\n",
    "       [0.009],\n",
    "       [0.008],\n",
    "       [0.008],\n",
    "       [0.005],\n",
    "       [0.005],\n",
    "       [  np.nan],\n",
    "       [0.008],\n",
    "       [0.013],\n",
    "       [0.021],\n",
    "       [0.03 ],\n",
    "       [0.038],\n",
    "       [0.05 ],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.011],\n",
    "       [0.009],\n",
    "       [0.007],\n",
    "       [0.008],\n",
    "       [0.006],\n",
    "       [0.003],\n",
    "       [  np.nan],\n",
    "       [0.003],\n",
    "       [0.006],\n",
    "       [0.011],\n",
    "       [0.018],\n",
    "       [0.028],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.009],\n",
    "       [0.014],\n",
    "       [0.014],\n",
    "       [0.012],\n",
    "       [0.011],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.007],\n",
    "       [0.008],\n",
    "       [0.015],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.053],\n",
    "       [0.07 ],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.031],\n",
    "       [0.026],\n",
    "       [0.021],\n",
    "       [0.019],\n",
    "       [0.017],\n",
    "       [0.023],\n",
    "       [0.02 ],\n",
    "       [0.019],\n",
    "       [0.014],\n",
    "       [  np.nan],\n",
    "       [0.013],\n",
    "       [0.019],\n",
    "       [0.016],\n",
    "       [0.023],\n",
    "       [0.032],\n",
    "       [0.045],\n",
    "       [0.057],\n",
    "       [0.07 ],\n",
    "       [0.078],\n",
    "       [0.082],\n",
    "       [0.072],\n",
    "       [0.059],\n",
    "       [0.049],\n",
    "       [0.039],\n",
    "       [0.027],\n",
    "       [0.022],\n",
    "       [0.019],\n",
    "       [0.017],\n",
    "       [0.013],\n",
    "       [0.012],\n",
    "       [0.011],\n",
    "       [0.011],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.013],\n",
    "       [0.015],\n",
    "       [0.014],\n",
    "       [0.024],\n",
    "       [0.033],\n",
    "       [0.048],\n",
    "       [0.055],\n",
    "       [0.069],\n",
    "       [0.074],\n",
    "       [0.069],\n",
    "       [0.062],\n",
    "       [0.052],\n",
    "       [0.046],\n",
    "       [0.037],\n",
    "       [0.028],\n",
    "       [0.023],\n",
    "       [0.016],\n",
    "       [0.011],\n",
    "       [0.011],\n",
    "       [0.011],\n",
    "       [0.01 ],\n",
    "       [0.011],\n",
    "       [0.01 ],\n",
    "       [  np.nan],\n",
    "       [0.004],\n",
    "       [0.01 ],\n",
    "       [0.012],\n",
    "       [0.017],\n",
    "       [0.022],\n",
    "       [0.031],\n",
    "       [0.046],\n",
    "       [0.051],\n",
    "       [0.057],\n",
    "       [0.056],\n",
    "       [0.041],\n",
    "       [0.034],\n",
    "       [0.028],\n",
    "       [0.024],\n",
    "       [0.02 ],\n",
    "       [0.018],\n",
    "       [0.017],\n",
    "       [0.017],\n",
    "       [0.014],\n",
    "       [0.011],\n",
    "       [0.008],\n",
    "       [0.011],\n",
    "       [0.009],\n",
    "       [  np.nan],\n",
    "       [0.003],\n",
    "       [0.007],\n",
    "       [0.016],\n",
    "       [0.027],\n",
    "       [0.033],\n",
    "       [0.039],\n",
    "       [0.054],\n",
    "       [0.062],\n",
    "       [0.07 ],\n",
    "       [0.065],\n",
    "       [0.064],\n",
    "       [0.058],\n",
    "       [0.046],\n",
    "       [0.038],\n",
    "       [0.024],\n",
    "       [0.023],\n",
    "       [0.022],\n",
    "       [0.018],\n",
    "       [0.014],\n",
    "       [0.013],\n",
    "       [0.009],\n",
    "       [0.009],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.007],\n",
    "       [0.012],\n",
    "       [0.021],\n",
    "       [0.033],\n",
    "       [0.049],\n",
    "       [0.065],\n",
    "       [0.079],\n",
    "       [0.084],\n",
    "       [0.078],\n",
    "       [0.077],\n",
    "       [0.068],\n",
    "       [0.059],\n",
    "       [0.05 ],\n",
    "       [0.038],\n",
    "       [0.03 ],\n",
    "       [0.03 ],\n",
    "       [0.032],\n",
    "       [0.024],\n",
    "       [0.021],\n",
    "       [0.02 ],\n",
    "       [0.017],\n",
    "       [0.016],\n",
    "       [  np.nan],\n",
    "       [  np.nan],\n",
    "       [0.008],\n",
    "       [0.01 ],\n",
    "       [0.013],\n",
    "       [0.013],\n",
    "       [0.014],\n",
    "       [0.014],\n",
    "       [0.019],\n",
    "       [0.026],\n",
    "       [0.032],\n",
    "       [0.038],\n",
    "       [0.038],\n",
    "       [0.04 ],\n",
    "       [0.031],\n",
    "       [0.03 ],\n",
    "       [0.026],\n",
    "       [0.026],\n",
    "       [0.023],\n",
    "       [0.016],\n",
    "       [0.014]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 15.1 Multi-Objective Least Squares"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mols_solve(As,bs,lambdas):\n",
    "    k = len(lambdas)\n",
    "    Atil = np.vstack(np.sqrt(lambdas[i])*As[i] for i in range(k))\n",
    "    btil = np.hstack(np.sqrt(lambdas[i])*bs[i] for i in range(k)).ravel() #ravel quick fix for shape compatibility\n",
    "    return npl.lstsq(Atil,btil)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "As = np.array([np.random.randn(10,5),np.random.randn(10,5)])\n",
    "bs = np.array([np.random.randn(10),np.random.randn(10)])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  after removing the cwd from sys.path.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  \"\"\"\n"
     ]
    }
   ],
   "source": [
    "N = 200\n",
    "lambdas = 10**np.linspace(-4,4,200)\n",
    "x,J1,J2 = np.zeros((5,N)), np.zeros(N), np.zeros(N)\n",
    "for k in range(N):\n",
    "    x[:,k] = mols_solve(As,bs,[1,lambdas[k]])\n",
    "    J1[k] = np.square(npl.norm(np.matmul(As[0],x[:,k]) - bs[0]))\n",
    "    J2[k] = np.square(npl.norm(np.matmul(As[1],x[:,k]) - bs[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1e927690>,\n",
       " <matplotlib.lines.Line2D at 0x1a1e927910>,\n",
       " <matplotlib.lines.Line2D at 0x1a1e927ad0>,\n",
       " <matplotlib.lines.Line2D at 0x1a1e927c90>,\n",
       " <matplotlib.lines.Line2D at 0x1a1e927e50>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(lambdas,x.T)\n",
    "plt.xscale('log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "wow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1ed14f10>]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1e905d90>]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(lambdas,J1)\n",
    "plt.plot(lambdas,J2)\n",
    "plt.xscale('log')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1efe2050>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(J1,J2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 15.2, 3 Control, Estimation and Inversion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(336, 1)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1f0c74d0>]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#estimating a periodic time series \n",
    "np.shape(ozone)\n",
    "k = 14\n",
    "N=k*24\n",
    "plt.plot(range(N),ozone, marker= 'o')\n",
    "plt.yscale('log')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#recall mols solve from above:\n",
    "def mols_solve(As,bs,lambdas):\n",
    "    k = len(lambdas)\n",
    "    Atil = np.vstack(np.sqrt(lambdas[i])*As[i] for i in range(k))\n",
    "    btil = np.hstack(np.sqrt(lambdas[i])*bs[i] for i in range(k)).ravel()\n",
    "    return npl.lstsq(Atil,btil)[0]\n",
    "#     return lambdas,bs, Atil, btil"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  after removing the cwd from sys.path.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  \"\"\"\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([-4.47169601, -4.6155201 , -4.66369591, -4.92445728, -4.92485585,\n",
       "       -4.92525443, -4.57013665, -4.18860317, -3.78897573, -3.47443415,\n",
       "       -3.18300288, -2.94105468, -2.75587987, -2.66758968, -2.66077992,\n",
       "       -2.74500243, -2.90490121, -3.09433721, -3.3102847 , -3.55996092,\n",
       "       -3.75306083, -3.95428572, -4.23270891, -4.33879988])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k = 14\n",
    "N=k*24\n",
    "A = np.vstack(np.eye(24) for i in range(k))\n",
    "D = -np.eye(24) + np.hstack([np.vstack([np.zeros((23,1)),1]),np.vstack([np.eye(23),np.zeros((1,23))])])\n",
    "ind = np.array([k for k in range(0,len(ozone)) if not np.isnan(ozone[k])])\n",
    "As = np.array([A[ind,:],D])\n",
    "bs = np.array([np.log(ozone[ind]).ravel(), np.zeros(24)])\n",
    "x = mols_solve(As,bs,[1,1])\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 889,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x12af8e1d0>"
      ]
     },
     "execution_count": 889,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12aeb80f0>]"
      ]
     },
     "execution_count": 889,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAD8CAYAAAB3u9PLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXmcJFWZLvxERu6VVZVVvVLZ3XTTNMXWQgKtKIICSoGI5nDdZnHuMAvO+LmM+pU2Mzou1xl6qHGb0e86jl79HJ1RUUzoQSmQRpF2QJakbbaiaXqhs6C3qqwl94yM+8eJExmRGcs5EZHdBRnP78cPyKp669TZ3vd93uUIsizDhw8fPnz4CJzsAfjw4cOHj6UBXyH48OHDhw8AvkLw4cOHDx8KfIXgw4cPHz4A+ArBhw8fPnwo8BWCDx8+fPgA4CsEHz58+PChwFcIPnz48OEDgK8QfPjw4cOHguDJHoAVli9fLq9fv/5kD8OHDx8+XjZ49NFHj8myvMLJzy5phbB+/Xo88sgjJ3sYPnz48PGygSAIB5z+rE8Z+fDhw4cPAL5C8OHDhw8fCnyF4MOHDx8+APgKwYcPHz58KPAVgg8fPnz4AOArBB8+fPjwocBXCD58+PDhA4CvEHz48OHDhwJfIfjw4cOHDwC+QvDhw4cPHwp8heDDhw8fPgD4CsGHDx8+fCjwFYIPHz58+ADgKwQfPnz48KFgSbe/9tGJbC6PickpTBfKGEnGMD42ikw6dbKH5cOHj1cAfIXwMkI2l8dNt+1GuS4BAPKFMm66bTcA+ErBhw8fruFTRi8jTExOqcqAolyXMDE5dZJG5MOHj1cSTphCEAThNEEQviUIwo9P1O98pWG6UOb63IcPHz54wKQQBEH4P4IgHBEE4Ym2z68WBGFKEITnBEHYaiVDluXnZVn+MzeD7XWMJGOGnw/GQid4JD58+HglgtVD+A6Aq7UfCIIgAvgagGsAnA3g9wVBOFsQhM2CIPxX2z8rPR11j2J8bBShgNDxebHWQDaXPwkj8uHDxysJTEFlWZbvFwRhfdvHrwbwnCzLzwOAIAg/APB2WZZvBvBWpwMSBOFGADcCwLp165yKecWiIcsdn9UlGROTU35g2YcPH67gJoaQAvCC5v8PKZ8ZQhCEZYIgfB1AWhCEm8y+T5blb8iyfJEsyxetWLHCxfBeWaAZRgb6AIAfR/Dhw4d7uEk77eQuAJPrCpBl+TiAv3Tx+3oaRhlGWpjFF3z48OGDFW48hEMA1mr+fw2AaXfD8WEGKw8gFhIxPjZ6Akfjw4ePVyLcKISHAWwSBGGDIAhhAO8BcIc3w/LRDjMPQBQE3Hz9Zj9+4MOHD9dgTTv9TwD/DWBUEIRDgiD8mSzLDQAfADAJ4GkAP5Jl+cnuDbW3MT42ilhI1H0WC4n4wrvO85WBDx8+PAFrltHvm3z+MwA/83REPgxBL32/j5EPHz66Bb91xcsEflM7Hz58dBtLsrmdIAjXAbju9NNPPyG/r1uXrVdy/aZ2Pnz4OBFYkh6CLMvbZVm+cXBwsOu/i162+UIZMlqXrdvKXy/l+k3tfPjwcSKwJBXCiUS3Llsv5fpN7Xz4ODHI5vK4ZNsObNh6Jy7ZtqPnWsIsScroRKJbl23eQ7kjyZihPL8Yrbfhx5W8hU/N+h6C6aXq5rLN5vKGZdxO5ZqlnHpVjNbrVtHLEd2iOnsZPjXrK4SuXLYTk1OGPTwE5ffxIpNO4ebrNyOVjEEAkErGPCtG8y+Wlyf8y8t7+NSsTxl1Jb/fjC6S4dz1zKRTXXFbP7v9SdOLpVfc5Jcj/MvLe/jUrK8QAHh/2YqCAMmgLakomBFJJwfZXB6zpbrh1/yLZWkjGQ8Zrl0vXV5e4/IzV+B7Dx7s+Hz9st6Z0yVJGQmCcJ0gCN+Ym5s72UNxBCNlYPW5E3jB+1vRC/7FsnSRzeWxWGl0fB4SBb/JoQvc98xRw8937p3BJ7O7T/BoTg6WpIcgy/J2ANsvuuiiv+j276KZGvlCWbXsUy5po5SJ65ny6JL1KhvCygvwL5ali4nJKdSbncZFXzjo03wuYHUevv/gQVx06vArfn6XpIdwoqANqAItC95tYLXbWUFeBRTNvIBkLPSK3/gvZ5hdXHNlY/rPBxusvGIZ1h71KwU9rRCsHp1xk7GhzQoCSOyAyvMie8ergKKZ4vrM285xPDYf3Uc3UqUpejkFeXxs1DRdHOiNuFpPKwS7BXazATLplHrheuV5UHh5IUSCrS0wFA/5byu8DNAtD7TXU5Az6RT+8GLzd9x7Ia7W0wrBboHdboBu5Yp7cSHQw1/Q0AyVetPVuHycGHTLA/VrG4DPZzbjjy5e1+Ep9MqrhD2tEIwuVgovNkC3csW9KFTzD//LG93wQP3aBoLPZzbjS+8+vyuFoEsdSzLL6ERBW5TmZZYRzVwySzL1wvV0WzthdsjzhTIu2bbD74vjAbrdVt0ok81NUeHLsTCrW3PcrULQpY6eVgiA9wvfnhLaDqeeh9cb3+zwA73Z1MtrdKtRmt3+Apxb9JefuQLff/CgzpARlM+XIvxmdN6jpykjFc98CfjpGuDI/a5FUSomAAl/n/oqHjjzT7EiOAPAueupDfYNiAv4fPLj2PjY5cg+9oLjcbbTZZsiB3D76R/BLWu+DMBD+mj6LuCOTWSOvcTUV8mavXSvdzLlJvDwB4DsqUDR+dwCekpuILCIb67/LG5d/wF8cfIpz+RujLyA7OkfxRfWfkH3PU4s+mwuj588mocM4PWJHHaM3ogbV/wEMoCfPJr3JrC85+tAdi3ZEx5gYnIKlXodnx75V+w88wasCR32bt/W5/HiHVdjz3dOx6att3uXcTW/B5h8LfDAe9zL6gKWpEI4UZXK2VweV//j7cBjHwXKeTzz+G2uZVLr7OLEbvzhsruwJnwE6fiU+jUngT/tJfDu4btx+cCj2Bzbg+/e+4DjcbYHJj+46oc4L74H7xr+Rcff4gqPfhhYfA44dId7WRT1BeDRDwLlPPDSPd7JPfoAsOdrQOkgcPxBV6K0c/eO4XvxpoGHcW5sL4TSAc/kvn/lj3B+/Fn8j6H7AMWud+qBavfYp0b+DadFpnHVAJkDTy7ZRhl4+K+A0iHP1my6UMb58Wdxw/LtSIWP4oK+p9XP3WLX/f+CUxYnsSm8F+siL3qXcfXUNrK3Dv6QGCBLDEtSIZyIF9Oo1R2t7FU/2/d8zrOU0NMiLTn0v52m8mk3uFZuX3Wv0bczI5NOYefWK5BKxnRyk+I8AGAwFnIlH806sKiMcfF5d7K0WNjT+u95D4PgWlku5Wqt9NMih9T/3jJs3B7BidyNmjVbESy4Cn7SPRaAhPXhaQDA2vDhjq87xuJzrf/2aM1G2vbtRmWevYh5PPvco+p/09/hiWJc0Px8aeml8y5JhXAiQC2i9RGy+fdXT8GpoRc8SwndEJ5GqRnB0XpSdyEA/BtLu8E3hKdxoLoaAJBOHnE1VnXMV52B9Rq59AAUaw13CnJxPyBLQOI0YnU3Sh6MFi2FkDjNW4WwsAcIhIFYyrVcLSW3PjyN/dVTAAD/89yqp3Lpmn3x6ih2br3CMXdO99hI6BgigQYOVFdjVWgGiUBJ93XH6MKajY+NYmNkGg05gHxtBTZG8ggFnPdz0hblrZAPas5D6/y6VowLe8gcAHrlsETQswqBLuyGyDQkOYBfLVyADZFpvFgoupJLqZgzEy/hQPUU7K2u0Vkx7b+fBbpLIDKN3xbPRVGKIbNxwdVY1TGfFURCLGPHwhYALUurLsnuFCS9BEbeqv9/t1DlvoVYns3ORm+O5SY2AoNnub60tJTchsg0phpnoyYmsXngJU/knjVcQzK4iIdqrwUAXLp6xpVcuseogUT3woZI3pscfO1eKO4DpJo7eQpOjUzjhdoqPFtZh9Mih1BvynjkAP9ctBflrY9MY3d5k2LQtc6vK8VYnwcqR1rnwUtjxiP0rEKgC7shkke+tgJTlfWIBao4f9mia9mZdAqXrJzFWWdciJfkUw0VAs/GopfA6UPAqtAMZgLrUOvbZCjXERaeBQDcv3ABas2gTq4ri0iRizXXkX97dQDmnwXia4ChNKGlivu9kbuwB+jfBPSPEuvNZXfaTDqFneOvQyp8DGMXX4rwkHtFQ+X+/AZivb7r2v8JiFHPFBj1OnfMvwYAcNHQEW9y8OefBaKrgGUXEa9x0R3dCRAvf304j/3VETxfXYMNkWkIaOL7Dx50FacLooE14cPYp8il58G1YqRKceVlQDDhK4SlBNUiCk9jf20Ez1fJhv/Yaz14s6DZIJx5/yZs3HghhoPzGBRb1ryTjZVJp/CLG8kY3/fWqzG06tzWhesWykZ9rroWB2urscEri2hhDxAaBJa/Tvl/D8fbvwkYUOZw3gO5cpNcUlQutebcYmEvALkl1+M1Q/8oke3BHGTSKXzstQEg2Id3XvMeSHIASWm/Nz24tMoW8GQe8oWS7vzGAlWsDh131IhOa/isDR9GUGhif20Ee6spbIjkvSlOm1fWbOAMoP8M7/aCh+hZhUAtovWRwzhQPQVyjCz0JSkP6IfSIUBuAImN2LzpbADAuUMl91WPNDCb2AjEU0D5JddWLJXbhIhZeTVeqi/DiuAsAA8sosXnyViDcSA8RMbrBYqKXGXNUPFAbvlFQKoA/crceiVXu2axFFA57E12iSr3NEWuR3O7+DzmxLX4RHYPZhoDWBGc9SbDhu4FOrcu90I2l8dycQ59YgUHqqfgpfoyAFD3Lq9nqzV81oXJ2A5UV6Mkrsby4Bx2fvwy915S0eD8LjH0rEIAgMx5qzEgLuC9b9yCH35IoTWqx9wLrh0n/46uBCLLAQDf/+PTsW/bta4Cf6i2yW1WgYa7mAeVG4guw+evPx+VwBCGg/PeWETV42SsABmvF3Mryy25ytx6IpfObcRjue17QZaAugfp1LXjQCgJiGHv5hYAqsfx7Fwc5bqEWWkAQ0GSceY6w6bm7ZpNTE5hMEi87uONQcxKAwCAYWW8vJ6tNk6XVGQUhWFsGd2kjN9djAYA2WPBPmIgeblmHqK3K5XrBfLvyDA5XIIIVN2lBQIAqsrmCQ8DIbJRUfFAbk0jN0KqR9/x5dvx6PGku+rl2gwQVh7/kM4F9j2OnTdc4c14+5UDFVnhzdw2FsilGh4mh0uMeiOXzm2kNbeerFm1c81QOUo8JrdyI8Pkv72aWwCozeBIhVzaM40BDIst5eU4ntQoE+8rPAyIESDY73q804UyLogThVCQ+nG8QVLUh8U5x5QsQBTNkEjiiB+8+jU4b+XTwGGQNaPGjVMo5wxAa81kGVhCT+v2tIfQOqxDZFEiyz2+uIc0FpFHl0sgDIgxPJgnm6hWOuK+VXF1pnVBRZYTRdn04LGVWptcTyx5gzXzxJLv0prVZgAhAIT6PfY8WnP71EwYaBRx5k23ua+orc2gLpLLdaYxoFrcgIt4knZuAU/WbCQZQ1KJy81JCcw2iOG1LLTg2LOldTmfuZqkCL/lwrPwgFKw/p5/ucP93Lafs2YNaLhPYvESva0QaoRv1GttLw6rIjcy3IVLYBgQBPyfR8hGGg62LDjHbn1tVj8HQItCcQq5CdQKLSs26pEVa7RmnihxjdzwMADB24tbCJA5ALybh/Awsrk8fvA7YrkPBefdGQayDNRmcfb69YiFRMxIg+r+chVP0p4HgMyDyzUbHxvFigipkShI/Zhv9qEuixgSC+6D4LVZIDSA7K7DuOWX5By4nltA7yF4uRc8xJJUCCeqdYWOggEUy8VjD0EME9rIq0tLOVTPFiIAgGFxXvctrG69tghn+ug0Dhaj5AseKLBsLo+rb9kOQMZXfn2cHCBqFboNgmupHTpeTz2PYSAgEvkeXtwAPJvbS7btwL7pF/CLvXV8dvuTOFxNAGjtBceGQaMINOs4Y+2puPn6zWgElyEpLmJtMuwunqSs2Yd+cgAbtt6J3xwSUCi86EyWgkw6hT9M9wMgCkGAgNnGAIZEDy7uKrm4Jyan8GKFzO0yt3ML6M6vuhcqSyuOsCQVwoloXQGg83LxwIrN5vL4j18/jlIzgksmfqNchl5Zxy0LI9y3CoDeQwDY3Pr2IpyEMI9f7iNVydRF/v1/2e7IRf5kdjc+8sPHUSqSv/fAQgQ33bYbTxwLExqqPm8jwQYdStzDuQ2ESFyCyvUqhtDufTmUq123QXERL5bjmC3VW/x50CXfrzkPmXQKf3LFFohCE7/+67Sr5IKHniHplnvnwpABTJcTKM6/hE9mdzuWCQCbV0gABAz0L4MMElxe5kUQXDln04WySkW5nluNXAAaT9z3EJYOqkaXizvr7abbdiPYmEWh0a9aKjPSoHdWrDLW97/5AtTkoHoAAHa3XluEI0LCgFjCsVoCn7njSdzySzInw8E5bksrm8ur7ZMpv1uQ+lGuS/jp00plqtsD0L5mHtAPAHR0HAAP6UPNJRCMEYXjcA7ougloYlBcREEiFvKM1KkQHPH9RsoWcL1m9+56BgDU8R6XBrEsOIfvP3jAE04+XyDtQEjMw6OLOzKMkWQMDQQx1+hTs60Ah3Mry3rjwKeMliBU3jhJ/h1ZThatad5r3gr0wA6Ki5iTiKtZrksk6OeZh0CCUpkL1kAKLcOaeJG7vkF7UAaUjIo5KYFCua66yE7SDbWPAg1q5ALA8/MKJeX2klXXTBOcaywAkrseQYTa0WT+eEkfdsh1Ngd03RKBMkShiTmJeDMz1IpVaA0nfH82l8cHv0NaiX/gx/taNB/ges1kRYnTvTDbGEA0UENUqLpMZSVrRi/oWWnQ/cWtkUtTUWekASxzG0uRyiRNXLtvgSWXetrbaae1GZICF1C6ekZWAJBbOdOcoAc2qVEIAHGRUXHXX18dL7UwAMQSq3DdqhCuu/FaLjHax3GSysVdUA8rseKWOUg31H6f1kMAgEBMmU+31nxthqSaBpXDrlqxx1pFT05Q1c8toiuAYzudy9PKjWjkuqCi6LoNqtk1ZG6F8BAkOYBlSv0Ib/ox9WzfECMB1Ofmwrj3tt0YfEsAlwOuFeOavgoacgCLTbJmx2lGUHAO+ULUkcxsLo9Vz+xBXA6gWG0gJAo43hhQ9627ILgmDRvA4uNDGBbn3L2k2E5PB/tJxqAX3q2H6HEPof2w0kCP8wMLAIPignoRAkA9ONzKOXYKqUaCfu3jdXBY9UU45HIpYxBD8ZDqIjuhH7TfNxhseQgCgHdfkiZfcGt1tylFz1JEjeRWj7uqKs4+dhDN2hy+8uvjrXiMC8+DrlsySJV4P2IhEZ9+22aI0WX4wCWDjgofqWdL9wKl+b7ygOKNuby0LjtVVM4DoeNmNRSX08d8brptN2LyHApSPwrlOiAD5cAQksFFrHMTBG+jdjLpFDafthGvXyu7Kyptz45TU6Z9hbB00G4VRkj5u9OqxNaBbSmEWEjE+Rs3kpxjyUX75/YNRcfrYKzaTpzUkv/Dy87Hp687B7GQiFlpQPUceCwtnaJR5M5LCfzhxetw1QXnKH+Hy4pPszWrupTbbhyElylVxc6C4NlcHttufwgBQUahkVDjMS8UY47nQG1yOEjosVBsWeviiyxzPAfT7d5ig3iLz8wonrPLNdswUIUcGgItv6Je6MpIydVjPoPiAgqKrHpTRhmE+r3/r893fnE3FknbmYj7c6ZDe+zLK7keo7cpo3o7b6wsFr18OUE3YfLJIualhOpintP/AnBUkUuzWHjRXtwDkM3lYqyZdArY9yLw38Abzh0FBsj4S48PYFBc5HaRtdWeSXERpWYUt7xrC/lclkkluMPxqmjn+sPu1sxUrnYv0BgTByYmpxCRSSW8Np70YB5Yu8z5WDPpFDLD64GdwP93w5uApLI2LvZCi4paRLUZREUmKc3RaALVZhjfuecRfHf7Dhd0ySxWDK/Gl959PiYmpzBXJpf4+y4ewhYXj/kMikUdNXtgMQIMk9+nBm0djBWAZ+esJdfb89st+B6CboGU/3ahtTOvWoZooIob33Rhy8Wkct1YsYYbaojIdENFtcnNpFM4+9RT8cYNoiMXmVZ7/vlrkognlrd+XhBa43WD9iCtB2uGZoN4Ah7KnS6UdZW06uelKCnYc9PgzmwvuPRsB8UFzEsJAAJCAQHFWgMFKYHB4KKr3P7ZwmH896EmPvLDxwEAH3sraa29ZcTRcBWaSdYlbwBAMOrOw9f9bPvcNoru3nCwOr9LCD2rELK5PI7MHMUPd823+F31EnChtSnFENLUUHRN7jBxb900uDOSG/HAcqnP62UCyqXlTC4tyHrhyGH8/Nly62LyYm4bSmtyD9dsJBlDQiSW7EJT4xWGhwDI7hrcme0FF97izddvxspoFQvNPqSSMSSiQdQlmSgEhUpyktufzeUxN3ccR6tRtcXKJ7YrCRYOxzs+Nopl4TpEoYmFZhwAoTav20JpSW/P2a7DhOza8ukfOW9fQeWGvVmzbqEnFYL6nrJQwqIUb1k/TywCEFxuKHq5DLQ+84LWMJTrgXXcWAACEVJRrZXrltusL+jHCigHwN1rVn2BMo6Uwy1rNdhHssTcjLcLazY+NorhcAUAsCi1Lq3Xn30G+QY3lmF9AYCgpx9drlkmncKbNsVx2imnYOfWK1AokV5Wc1JC9XQA/tz+ickpxAMldQ4AYL4motyMuoqlfP6tpwIgc0tTrt+wWYlHeHjOsrk8vvsY+WxAdOEpUbnBVrKJJ+fMY/SkQpiYnEKlXkciUFZT4cp1CRN37yF8savDqlgC7QsPuLy0qOViJNelRaSVSeXWCu6oqPq8fg5UufxjbRXSyUgESig2Yy1rlVJRnliFBnPrcC9k0in8yRZCYRSbMfXSunCT8p6uF2um6ZL5zIwI1OexcauLJmyavUCzf+Y0HoL2c1ZMF8pIiCX1nFEUGn2u5uCaM4ky/Id3vc4TapZ6oB/6918BAH6xhySATExO4ViVKDM3nhLq84AYAwKasG14iNQnuK2h8RBLUiF0u5fRdKGMeKCCgCDrLJfpQtnDy8XIkveC1tDIdRkEB6BcAgaWvCy1fqdncp3NLbVKI0Id4UBDXTPVWvVqzYLertmFI+Tw/+pv3t55abndC5q5zeby+MkTZC76xaKjCvNLtu3A0wcP4f59VWRzeTWuMNfoV4sXneT2r02GEQ9UdecMAEoYWDLnTOuBJgJEEXxu8hCyuTymC2U1TqFVjNxV0A0Dj9mL8+sxlqRC6HYvo5FkDH0BsqBFjeUykoy55/WMLu7QgPsMm655HgvGljzgzlNqLBh4Hs4oI2qV0jWj1qZqrYaHPaBgoF8zMUaoNFd7weDSUi8Bl96iRubE5BSO1ciFS+kdViu2nY47ViW9pwDg5us3QwomkVQyzpzk9n/iTeT7tecsFhIxmFzpDc2n3buBEHmrmHPNtK1c6B47Vo1gYnIKI8mYWrTpxlMyNJBCHpxfj7EkFUK3MT42iuUR4qYtaoJS42Oj3aEfBIFQUW7linHSiZPCk9hE50Z9KE+oomv/iY9+0HZQXVycxd7Ztu2lUlF8GTbUWk2IxHpblOJ6a9XtmjXM1syDvRAIkUdhKLyi+TQX4XShrNa98Fqx2sswIZaxKMVVZZJJp/DuS85DQixj58cvdZRyeu1Z5DINRgZ1LVaWD6/23kMAyPzW+eRq5ykhltCUBZSaUUwXyhgfG0U1QAzTQReekiGF6nsISwOZdAofv5LkvBWlmN76cRvoMbI2AWINOJSbzeVx+yNTOFKJ6C9o5XL56l0PY8PWO51xx22WfDaXx9d2khYGPEE0fQdVGXGhhLv3lPQ/p2bY8BV70SyY0waJIonEknpr1fXFbbJmXuwFI5mA+/Fq5I4kY4a0BosVq70M+5T4jPbzXUdInOLCT93qaH/du/s5AEB+Mah/1c+1Eqdrpt+7ewoh3JN7mmus2nlqxRUFjCRjyKRT2Pq2iwEQ78vx07Ld2gseoycVAgC88TTSQ+Vbf3GlPt/eLWVkZrk4TOWkF22gMY+FZlx3QWd3z6EhByDUZ5y/mmZAPxxRgmhqWwsG+kFradL4zGw9qv85F3RJJp3Cd957JgDg5ndfoj+QDqkoFR6vmU5usE2mGCV0lKvMMP2ajY+NoiqQ/6dtLVitWHoZhoU6IoEGFhSufyQZQzaXx/ceI3MzGFxwFJv45o5dAIAFSb933dN8+jWj5+RYrY87G0hbYZ8QSx0e6NsvOBUIDeAjb1jhvH2FWUwNWFK1CD2rECxdztqs8wyb+jx5HUvUB9EOV2J4cv8BbkueXrR9gTKKkiYjanIKE3c/i4LUr7MKuTMg2jaqU/pB53YHWtSO7ufcWkSWNMGc4y61rfhMQv95yAMrtj2OAji2jikllz96FHc+vajuoUw6hQ9c/WoAUCvMWa1YlY6ja9aMqZfhxOQUjtb6VLkAf/fbUJMYFbReQP358BBp5eI0w6ZtL9BzMuegbkLbyqU/UEJViHfOnxcejVFMDfA9hCUBg6CUSpfIDbz5ljudpe41lCCtJiUwm8vjkWkgjjluS15teSyW1HgH/ZxmQCQ1F7f2Z5jQFlQeScYwp/SySXLQDzq3W2wFf3U/59YiMgokauXWC87kNhaU+ExbJxfXlJGBVUjlcs6BlpLrF0s4Ugnr9tA1F5wNAPhf14xwWbH0MtyYJHRcODqoXob6DBv+WoTpQhl9YmfyhprNB7gwDhYAIUgC/5oxzUkJ1bPlGSutsH/LWQlsWH1K5/y5rSo2DCorSTN+UHkJwMTlPFgkG6y4eNRhAUpnXv/E5BRm6n0YFFsVxazWC71QExoPgX4+koxhvpFQ0wLbf8YWzQax0troBwTjqDaDXEE0ndutWJt1IaH/uW56CG7lemjJt+QaZHA5lKutxegL6IO/AEhhoRh3NN5MOoVb//xcAMAnMxerl6Gb2AT9Pq23qPt5T9ZsQDW89HUTrXPmLBvIZM04g9V6uQZ7ISASpeB7CEsAbUEpeuDmlUdH+sWSwwKUzuDRdKGM+WYf+sUiAFn3uR20Lv1CW0bU+NgoFuUEBjQHgCsDoqEccs0BIBbjq1CSE+gXi8z0g9btTiipe39wyTn6nwspTeKctm0wCCSKuNQkAAAgAElEQVQCaDWfcyrXKOBH5dYXnPcdMvMQQknusdK9EhOqEIWmmnqrp+T45bbG2jm342OjqCmxiX4lw4u3++1QiGbzxfQ/78VeaBtrLCRiXupDLFBFEA2H2UAmeyGUBGoOxyrVyOM4pnusy2/Hc6B3u53SlMA2l3OBKoRAUfc5l9y2QOJIMoYFqQ8hQUJUqKIiR9XP7UAv1P4nKigqZfrarpOHDo1AmnkcgiKPqyOlicWdSaeAF5bjj05L4o8uuYJNFjQdVF+YB34NXHr2Rv030D4uji+teXS0bAA0rrcLuYaXwCBIVtSCvgcNK4yKkQAia/4pLlG0I6lKx2mCv7rxupkDQLd3M+kUAs1XA1PAQKDoqPvt6NF+4BhQUrL51J8/up98k0drRse0bydRNGcMN3Hjm51kA5nRfIMeGDIme8xXCEsANC9Y43LmC2U1y4Ja3TwuZzaXx+kHXsBsLYqt21rtgsfHRvH4joQqt9KIclkvmXQKmCrjvZedi/eer7+g16xcDdRr2LeN79U0AMbFbhThQVIz4ARGtRiAErQV3F0CwQQJ2msR8kDRmM0BQGITThSCGf0Q4p/b8bFR3HTbbiSEzuCvTq7TOIrJmr3two3AnjA+fuUp+Pj57MYBxVkrAMxGsWfb2/Vf6MKaZdIpYHAL8CDws7/aDPQ7zAYy2gsO1kwnE/BsL3QTvUsZtbmGLZeTXNz9YpHr0qYxiJBcxIIU0wWOM+kUrr2QpEwOiCX+XGapSh7Y8dpyMcu/B9xZLmYWkRBweWlZUDuA84NlZslTWsOJAmtKpAut1dxyZLJRSm6DWS0GoCjxLlmxji/DzjYbl2zbgdd+4VEAQG7vPk/kqnBDH8qy9V5oLDjLZOvWOesCetdDaBi7nN+8h/DqaxN13DzGfmnTGAQpbNGn2GXSKWw54zRgGvjFB88Hll/MN1Y1u8Zko0oVwlNqO5YyyTUJ0gLkYM07fADdUq5LWsOU2oE7a9NsrE7lqvEZk7mVJRLQ53gwKZNOITMyCtwL3PKeS4FVbXszlAQWnV6wNnvBlSWvT9wgadTkjPxi1x4cGMrzUzuNeSCxofNzN/ShVCbrYrUXGgv8DybZze3ck3zyuoge9hA63flMOoX/+thbAQD/7+WruTYpjTX0i6XOFDvA3UY1aq1A4fAyzOby+OStvwEAvPe7T3VkUx2YD+Hw8SPOKqDr87qUwI7xurq4jeZAOWiey3WhEKzoODd7wYp+cOUt0vEaKCi3sYm2xA2ApKFKcgBRLPInbrTJ1cGNErejdtzKbUtxv2TbDnz3kVnMzR9zluLeBfSuQmgUAdFg84tRIBDmdpFprCEWqKDUjHZ83tpQDlxv+gCO0WGlB4BjvNRSq1TIRt0/J+hSbLO5PH75fBV9wqKzCuhGkYxVU4uhwo1CkIrGcxAIks8d0yUmckP8c6uTCVjL9XovuKF2GkWSttoen6FyHdOHrbnVJ2gIWJRi6BeL/Ikb6ni7tGZey5X0a6atKZmX+tAXKOKm2363JJRCbysEM3fdgYs8PjaKgVATIUFSFYK+AZsb+oHlcmGXSy21WIA84FJuRnQpthOTU5htkBe/AiAWHVcKrsdzq5NrdFgBR6mcAEhKqVQ2luuGj5ZYlLi3e+GpYwLQrGL0piy/V2e5Zt4ohPYEjfkmSW3mrRXIPnYIjdoivvbAi51/p5s1szS8vJOr9ZQWmnEEhSYEqejMU/IYS1IhdPs9BADWB8CBRZRJp3Dz28njJ+VmtDNw7Ioy8lYhUIssrigEqsDo59OFspp+S9MctV9nGq/V3HptyQPOL60Gydrxam5bcr1dMzu52VweP9lNYk2JAP+bCF6fBxUar05bvAiQ/kbJYJmrViCby+Pvso8hKDRRakY7/86gC/qQZc08OL/ac6RNc3fkKXmMJakQuv0eAoCuXFrXnk3G+3eZLZ3tA2i6pOeWC//lQi2yeIAUDZWbEd3nI8kY5mn6bcBB1aft5cLndlO+9aWZ49j+1JzxJeeULrGaWzGivImwBBVCm0czMTmFmRpZn34lZdozr841FUXkaosXBQBVoR/nrZK5YnUTk1MQJKLEy4oho/07s7teQqkZwzd35Pi9JAuv7p7nyGX9ke/9ypn3pcjN5vKAhkmlae79Yom/qroLWJIK4YTAKsPDaWqklbUpCO4vLUNukz/lklpq0UAV5WYEMgI6ekvbPZPWY3BVfVrNbXiQBNkYUy61fGtMqOJYJWRs+Tq1YiWLNVPH6/FecJMm2yiSgH1bRtm0wkcD0FWuM1udlmuWJFlTTlIuG3q5tGfQvm3XIr3xVCxX3p1mxXShjJhiyJSaEd3ndK/MNeIYcPBynNmaZXN5fObnREa/k3eVlfOb/d0Mxm/dpdv6NM19OFTkr6ruAnpSIWQfO4RmvYR//tW0sbZ3ynNbWYVAdy4tBx4CtdRWRBsoNSMd9FYmncK7Xkd62wxwtK9QYcf1y1Jrrmyg5VtjigIztHy7tmYOWxZ0y0MwubhHkjEsNFttV7SfM8HCQ9h9hPz7vE/92NvYhIO4z0gy1kF10s/V9jPNPnUOuL0koGO8E5NTOFolv8uRXKkEiHFM3L0H9abeEKLtaFZEqs7aanuMnlMI2Vwen80+goAgG3OQgHOeu1sKwUou5Uw5x5tJp3D9q5JYNjhk2B3z9WeRthM/uOFs/h7wdlw/wDwP1MINooFwoNER71DRjbl1I1ey8OqCfeRJVafjNRgr6TtE0hpp2xW+vlbGSjyby+M/c3OqXC7rWG4yeIv8yRtD4TqAFmVE/05t+5n+gAMvyWQvTBfKqMkhVJph53KDfYbfT726QGNpFKf1nELQcpDU5ezQ9m4vl7a3EFQ4DnzSjWogNyCS+IRTuWZjdctzG43VgdxWvKOVEaX9XCfXjRI/kWsmCKR2wul4DcaaSafw/jdfAMCFV2cw1onJKRx3GpuQlAvQai84qNj+6zeS1w4rbd4t3RMLUty5lwR0zK9W7oBj7ytu+P00hrC2v84mq8voOYUwXSh3XC70cxXhQYUzbfAJt0o1BNzFEISAcaEXles0p93Oknead201BxxyabyjlSJr0gcqPEg6Skp8nDSTh+Aq7mN1GXq7ZlelyZzc8rZTPfPqpgtlldbgjk1Yxb4AMgdys1XVzYhLN5Dx/Pv7rtD9nXSvLDT71JbwfLEv472gtrVp9jmLqSlzOz42ilBAX5tDab5rR09+QBnowdYVI8kYYuXW5aL9HCAu8sHfHMaHhoCxiZ/hr666kM/KAiwul4FWGwoeUHfeqNDLrVyrsQL413sfx7Zv38nXSdUyhkDTAtnGS3/fD+49DACIRPtxs1EXy6BGrhgFM1jWrOF0zaLEgzOT6/Wa0UpYp+M1iU0sKk+q9gXKus+ZZAK2e4z0JTKoDuaUS/dE87f9SATK3N1ZieElksJUA7m1xxPoC5ScyRX71O//zB1PolAmHkEk2g8ZAZyzcmnY5j2nEMbHRvEfP9sNAB0FZDRL4W39QWAImF+cwU23ke9lvggB6wPr4WFVEep3frnEVht+KbvrGK6VRUi1eV21MmAzF7LckVnSMVaAax4y6RQyp74KuAv49O+9Glhr8Pt1clcwy7b16oIu5tZuzZzuBbPLMxAk7zU7Ga+JVzc+Nopv/NdeAK2aFGbr2FYhOFRgFnIz6RQgnwnsuQ87t3J2Z7WosM+kU8DMCM5q1rHzzQ7lQtMiXotbE87WrAtYGmrpBCKTTuFDbyAcZHsBGc1SoC+T9QXKnFkK1imMz84KqFbm+PsD2V4uDq1Yi4DfxN3PYlGK66xCprmQKgBkNquQd6yA/eXCK9dmzdSLm/eNbalk7iUBxKPx8OJW4WQvNOvkH4PxZtIpfGiMxCao1c0cmzCYW1pTsmHrnfj47c+TD7uxF6QSf5qslSEDdNE4cHh+u4Ce8xAA4PUb4sBB4D//6kpg+avVzykvSl93ooEp7iwFk2yNA08X8eGVdQSFOvIFsHsfdpdAsB8ov8Q2xvbxmsidLpRRXN16/Uz7ua1MwJ7WoA2/WHGy5Ib67bNlzOTaeQjF59nlscp1cmnZKMWr02cAzwH/cN2pwFkc1rFJDx+aRnxwXgRWAA88/Txe//qLOMbLuBd4O5NaUZ2Ac6+O5fz6HsJJhMmGorwofY2KWsfM2QRSkQR+DXjjickpFOoRnVxm78PGcjm4IOIlJ51JLQ7ASDKGRSmGhCargn5uCdvAuvc0AZHr0POwDdi7kGtL83EqL8DeiuWUm83l8favTAIAbrn3BeO9Q3+fkznQ/Ly2pgRo5eBvf5S9h082l8c37yOG1GVfeMikap1vzajXcvfvnseeGdn8/IQGlsSadRO+QtCAZhPQ9tV9gbKDbALjrJLpQln1PLRWN3O2hkm2SjaXx6/3VRFFib8zqcV4x8dGUZb1lBHTXNhl19BnS51eLqZZOy4UjRg3D9gHnVJRFqm3VK7jBAMLuRxWrFrZu0CynV5cDBjvHSGgpDa7W7P2vU6p2VqZLf2WjrdRW0S1GcTBQs2kap19L+gq4QMVzNdNKuGB7q2Z09hiF+ArBA1oBW+ibwgAsLa/4SCX29ziLioWUZ/oIFvDjOufnMJcI6LIJDw3k+fRlEiaponcTDqFkRUrMRhqpXFGQwzbxc6SB5y53syUES8fzWDJAw4Vjd0cLBI6ihHZxw5Bqhfx1fsNunxScFxa1GKPq60gouZ7x4M1a9/r9DyMJNjSu7Vdeo36GKng2AtaryWutK63nINmFbc/tl+NgzB55Mr51cZPdD/nNCmkC+hNhaDSGsYFPrd+cAwA8Mmr1npWoUsqSUnfEmp1c2VrWHD9i1IcIUFCRKjrPreEHbUDoBFIICa0KKPZUt3e+2BSCA4Cqt3MWLHjd4EuUEYDre9jQDaXx6ezj0EUmig1I+aeIMfc0j0Sa6vLMdw7HqxZe7fTRcVDuOZMtthMq0tvVde2orNqnX0vaH82rlE0hnOg7IWbb38Y+UKZzSNXDK+nj0qqJ9Lxc0soqNybCoEG0UQT61zdULwBSvPMkkw6hT++lPQH6g9wvqtsYcWOJGMqFcWVJ26XXQMg96KEuKA/GLbeB4NcYsVyzq1dZkmQKFv+oDIDv+tErk0Q+vEXiVX6ms/+lMnKJBX25IItWVnHHJZ861Gnloeg/VwHB2v25MEXAQBnffZ+XLJtBwDoup0ODyYhI4BzV5jQdRbjNaohUsGxZtqfjQaqavcCwzlQ5IpNfSGd5ZlQ1uwXexZ18RP6cx/70S589+HjmJuf8R/IOWlQeWOTPz8QIR0lPaYfLjuHvJfw//8xZ38gW8+DfK2PJ0/crooUwNFKSPceAoWl98HgeTimHwIh8o8RnObg21E7Tou9LNYsm8vje4/OACBrxhL30VbYW1rHHJQRtdjjdlXgAPeaZXN5/Oqp/WjKAspyRFfHQrud7tx6JYQQe2xCW7VOL27D8XJ4dVqvhXoelnMAoC9Q6viS6ZlQztlLReMCRUmWsdiMISZwdlDtEnpXIVhdWILgjNfrBv0gy5ZyM+kUfm/LmQA4PQ8GakcIDShehz4H39L7YKGMHKVG2lzcgDNFwxpD8HAvTExOYbbGl3E2koyplry25YqhdcyYg6++T5AgcYz+xKD53uFcs4nJKYRQVsZKPABTvp9xzeh4h8I140eoKDjWTPtGQyxQgRhKWM8BYGgkmZ4J5TxEogOmY1iU4ggHGpAalZP+alpP1iHYXtyAM16vUQTiayxkOqAfmjXSLtoiS+E1Z6wH8sDP3n8+sPJS9rEClpkwW05fB/FoEzGhirJs8CyoBtlcHhOTU7hSfAifSwE/f3oO12wxEcyRg0/lfijxDK4YELEzlzdXdk6KvRpFID5s/nWV6+dR4vRZTvOMs7V9NOOspPvcDONjo/jez54AAOu14MzBz6RTyPSvB34L/OD9VwJxk7nlVLbThTLifRWU5UjH53q5fGuWSaeAw2Egsho7LzepieBcs0w6hcz5I8APqnj3a0eB84zn4P59VVwG/ZoBNh65cs6uPm8D/vOo2EEbAVCzGhOBEvIFEw/4BKE3PQQ7qxDojhXrhH6w484BZ1YsA7VzzqlEuZ0+JEMATC2y9tQ9APjk9n0W+dxsc6uVGw9UsCBFrN3qrnh1DnLwbeIoJO5DlEWCMeMsk07hw28k8142eMNChZO90AWvjno0Wq6ffq5DN7w6J5QvNbwsaL5//AXZd31tHsL/uNCgHQWFshdevWmdLn4iatKc1TR3sQxB+V0nCz3nIWRzeax+9gVE5Tr+n207zJtUOSjwecN8AXcePIb/fb+JXDHMn4PPmrUD4O9+8t/492mZrREdh9ztf3keMLDJ9Nv0qXuE1pipBTExOWXierMV+OgfxyEZIJR2MF0z7kQAO/qQ5uBzyLWZ2/GxUXx9+z4AfBlnl26IAweA7//llcDyi42/yYlHwxBP4i3KGh8bRd9DVd2rZqYejZPqcquxqpSvgzUzkTsxOQWhQZRbe/X+fc8cNZerMby0fYyyuTw+8sPHIaPVAjsRILVEpvv7BGBJegiCIFwnCMI35ua8fTSCWpyBZtH8cRwKDm6Tyo0IZXu5vBYRw8U9OUW+p1qZYy9OY7oE2DwaLQ1ALm7yLKcpBcKYg69PCayaP45DsVRiEzbeVyadwoevcdAfiNWSB/iNDoNnOXVQcvDRZOvbn0mn8KpTQmgIcUvvsiteHcBf7GUzt9rC0j6edi4WNU80Mldsk8vcKqcLWJIKQZbl7bIs3zg4OOipXLWwRaiqgTnLIhSuAp8G4hoX2VQu56V13xPEkrzxP542TU/84n0kvS/B2Igum8tj2/ZHAQC/943HzRUH4+WipQFigk3qHqBRNNY5+O1yTR/H0crlmNtsLo96rYivPWBR6AXwKxqG1Ntr0mcAAD7/Vo63C1iL/gDOy9A6RTaby+PLvyJ77Op/upOZ0lgVl3DOulOUjKIrdNYxLdD6+VQRpRLnuxB2qcIAv6KxoWZJYWmL2mn/miks1iyl/JwaQxA5W+V0AUtSIXQL2sKWslXqHsBlFU4XyogKxg9/u5GbzeXxrV+SQGLRwvPYO0v+zWK5UG+mWiFjeF5psmfqzQC249Wn7lWs0xcBZkWjlRtTqkht5XLM7aduyyEkNNi8Oq9pPpr27EQui1fHG0+y4M5vum038ouEXV5YmOVrjdI2Vm1cSAZwtBxGrTzHzpuzNhr02EMYHxsFhDCqzaDO8AqJgjXVZyGX7u9FTXdlrlY5XUBPKYRWYUtFd3EbF+Kwc6bk4W99cY+pXA4udmJyCmJTedTbwqNZlUyg1IwwNaJrlf/TFEarUn3aJMx6vNrUvXiggjpsKBCHchHss5fLMbe00MvWqwsN8MUmWBSCIPDz5xxxH265Fimy5bqkCYKXOJoydsptb3C32IyhTyxhYvIZtrGqz3IyZAl6OLeZdAoT7zwPxWafmmU0FA9h4h3nOY7Vqa1yEiTLbW2iztcqpwvoKYWgLcRpfxxHi2wuj289XADq87h02z221sv42CiGIoRbrVgVzABAeAiozTKNd1qTtWP63Kfy++elBAbFVgWl2e9veUkVSHIANTloKFMdK8A03kw6hZ1br8A1Zw1gw+oV1pvagdx1gzKuPu80e7lSGZCqtnJZ51aVy7hmAOwb8bmWa04p3PkMGf/nbtvJ3vnWovkanY85iVSC0z3G3JSxLa25/efmpARCgoTCvP08ZHN5XPvFuwAAX9xxyPpv68KaZdIpDA+txHsvHMD+bdci93dXscd9TORm0in89K/fCgDYeuXqk6oMgB5TCFQjx8WqaWGL6tIWySUxv3Dc1kXOpFP4m6vWAuh8dKcDoSTzG73aYiQrzyOTTiGeWI5V0Yp1AE/zs3HVSxIMZapjBfjeFGYJ+NH8eJ43hVmCv2H28eq9OhtvkWPNALBZ8gAZL88cSCXLZzmzuTw+fvt+AMCAuMje+damKSMAzCsKgb4p7LQpY/vPUbmbhqwL6To6sxZNOrNShLu0Zrx7QSoZPsupQ7CPfI+TN7Y9Rk8pBADInLcKYaGOv7ryVYbBPOrSai0iFhf5ytPJ93/1jy+1DhJyWC7jY6MYDNUAdD732Y6BgRV444ZgRwDPSCYt/y/byIQYJpYNr6VlexGyewgA7J/ldCB3fGwUQ2Eyt7bzwGttsrTvcCLXZm4nJqdQrAPzUp9qyTPROzatUWIhUXcemHlug9hEe4M7KvdDr19mKarVmbXVvsPyb6Nzy/rSHbMSd7hmZu3VAfI1XrldQs/VIdhlEzh2kVkKyACy8PU50lrA7AF2BZl0CqcfHwKOABXF8zCtLwgPAaUXrH83Wq+zxR+RULKTCaAsDOAXjzyJD/3oTrb6BpaAH69CsHuW04HcTDqF4dIa4EDLq7OcW0pFiSYP6WjB0uAPwHQpisrxfbhyK+Pc2nhJ2r07oKEPmfZu7BTDL9HxfP1u4k2tS1Rx81UMPLfJs5z05yYmpzBdKCMUJfz5FRstLGjN39DuMZv+beEhQG6QOQslrMcK8J3f4n57eRSa1tf0b25f62wuj/RCBLsefhIf+smdGIqH8Onrzjkp9FHvKQQbS2AkGUO+UMa8RL7O7CLz0AQAUQoRi5YJCs5dFQSOALs/f721AgklgdpuW3mAcigXEsDiCuy8wfxJxGwuj3MWIwhK87r6BlWGEZjagnBSUTzuPMDsel92Gin0+vf3XQGseJ35N2qpqNgqe8EM483m8pBekHBJn3dzq927dN/Sz23HayE3k04hc95q4AfAhy9dAbzK2XvKOnn0bzy+CpiE7V6gf1u8rZ+T6d+mpSVZFALP+eX0EBYbEd3Todq1BoDxW3fh1tPiqvE5W6pj/Me7ADA8r+sxeo4ysuvh49hF5nE5AXa+sFE0fZazQ67H1M7E5BRmNfQDwNL+moHr56WieCgYgF0u75rxyLV6lhNkbo/X9Rc309xajFW7d+maMe9duzkIiEBo8KTNrZbqBGCfgux0L7AkAtQLXFTUi8XOHkZ0rScmp1BvypiXEhgItPZCXZJPSqM730NoA9XI3/kFqZI+NVHFzVd7VEUKONuodjKpXEYqilXudKGMuWQCI6FjHZ97Mt6lcHF3S65ozRtPF8qYCycQD1QREuqoyyH1c1PY9PChe7T26CCWBQ7Y0oEd47XDSVwz+jc89uudAID+vkHcfKXFuXS0ZuYBe53cZp2NGlXkztWN6TDtWs9JCaTCR0y/fqLQuwrB4gBk0ilkzr0WuBX4xJWrgbM5qkhtLQxKP3BYx1Zv87bLbcy3DoMVGkUgssLyW0aSMcxLfTgzeqDjc0Ooz3IyjpfHSwI45tZjuZxUFMua0bkFiBd6rDGkfm6KRhGIrLSUm0mngOom4MXnsfNPzelAFWp7dY/XzOJVQh1CSjcChjXLpFPIDGwAHgK+/5dXAAmLc+mElrTbB4D+/DIqBDlgvKZ0rSnNp/XEtV8/kehhysiu0rGP9HfxmNbYsZdktrz/2/dyvcdqiy54HuNjoyjKA0z1DQDYqR2gO9amGCE5+kvBQ2CY2zJIERmljWzpHY+9r2wuj8tvuQuAjK/vfMl+LzpZMxPDS21f8Td3YbHZh715+4QInVyb+My7vk0K3T7/051stRgsHZABdS/cu2uK7V1lqYg1K1boMquA1lqPj40iFBBIIkCgCPr2iG0FdJfQux6C3eLzpoI1igAEy6KhbC6PL9/9Iq7YpOSJz7AEEs2f5dShC5dWJp3CM0dPw8CxIkRIWJ1MWFMQrHNLx8uQFeVI7stAIWTSKaxcPBd4gXgITPQOS+otHa9UAqSaacM6mtcfbZK/6aWiiK/Y7cXwEDDPyGtbzC393ZRXLzT68MS+A9ht9dYFg1yt7HAzCIwAzeqs/RmjcjkUwrfvyyE/fxYAm4SARgmnLFuGm6/fbJplBAD7fz2IcKCBmFBFNNbvZxmdMLCmlwF8xS2NEnGPLXjjickpzFaJwmjPE3eVtUPHCrCPl5EDPXPdOuAYsPdzl9pTUepb1Qzj5ciK4luzIQ5ao0QKhgI2x4CbimJT4q8783TgBeCnf342MMJA7zBbsRqKSzSmmGhe/1ColcZpuxd5irIssoza21fMSQnEAwv4DEvbZ6kEK8OLyq6C0D8DmjoiT5StQkVFoW+LYfo7lPOry6xqQyadAvpfDfz2W3j6U6+xfmSry/ApIyvwWpsMQdpSM4q6LOqySzwL0gJs47V5ltOx3JNtyQN8aYGsc8BLRXHSD6gVdB1AjSiIbC6PankB/7rzJXuqkWHN2vP6aRqn2V7M5vL4j8cXUCoeY6c6AcN5aP8dlD/naodhYnhRGU2ImJdaqZx5O9mc52EgsNjxJcPxM8r9bZ5QRWP/eDt7y5EuwFcIVuC9tGysQhIkEnRpga3PTcB9uTCM1+Z1KMdyeeeWZkV5KTfkrRJX4bFxoMoEsGvvPl0H0PaWE9lcHn972+OIBGr2nVk1cq3Gq21hArQKvYz2otrOpRRFPFDFkbl5+5YYFvGk9t9Bz4PTdhhmsuc1BXq2L5HxZFoBHQHg9t8NgBheDOc3m8vj67+ZAcDZcqQL6F2FwJJREOLMqmAIJMZCoi6jwLNAIk9WBUsbZQoeuoQrqKzJirIDtxLnyCxhVgicWVEcc/Dg1F7TPHWA0CCUNivZdWYFmPaCttEjlWu2FykNoxZrBopsNROA4TwYta8YFItsQVSbi3t8bBTUd9AW6NGXyEzBangpWVHLwgzvKjerpF03Q73P0ZpCJQfJeJk7ynqM3lQIdq9DUXBbhdZKhjbXK2NADSTatrtlTYfjyYqyKc7TwZGH0CW5FgH7llxOyohlbgHP9wIAlYoK1I3lUgpiWluhK9t0ZqVjBSzHS/fi2n5CVfT3DZjuxY52LkGGdi4Whpe2rbkAoBkcxPJwif2RIIu51b5E1u6J21OzDIML7XIAACAASURBVGsWEIHQAK45I6KO3/QcMxqf04VyR6sc2/F2CT0VVM7m8qg9NIWr+yK4xuo9ZQptgyyr5lQAc1Aqk04BhVOB2ix2vo8hkMga7OLJiuIN0gKMFzdHUJlHrlQiykBgsF94CvRYi4sAQkWVD7F9L2tmGACEh7A6VjH8EqUgRpIxBEovAYDuYScziuXnz1ZwDYBP3fpr7JBWme7zTDqFzLJNwAPAN/70DUDS+Cy0WmLoLy0rimcqfxgbZRGb/vYew6waXZD1iRzwux9bZkWpYFizlDLeOSmBDZEW7TIYC5n/EOs5A4DwEDYmG9i51eb8Mva0GknGMLegdJMNMFLJXULPeAiUB23US6g0w2w8XThJuHaq6a0gldksWEDJ1mAM/vLIZaU16CMjLHJ5qCj18RJGS55VboNnDhRFw0JF8c4tcwZXmW0OFLkXngLTPHWA0CDJUAMAUGmGO76uRTaXxye2HwQA9AeK9vucYS9oqU6AUEZWVGc2l8eDzx5CuRlme+Obp50Lw5rR3P55qU/XDqJYa1jPg9fnl/GcjY+NohEgL91R7+tkvZzWMwqB8qARoYaqTA6VLU/HZcVWSOk7C1gt+WYdgOy9XEmxSFnk8lBRVG6AQS5XEJxzblnldmPNZJlwxyxzoMgdiVd0FEo7BZFJp/DRK9cBAGpy2JJqnJicwnxNRLkZUS8Xy33OsBcoxROJLwcArB+oWVKdE5NTEFFVz5ntGDxes0w6hUQ0SCijYMvituwP1I29wHjOMukU/v7687HY7GOnkruEnqGMKB8XCdRRbYY6Pm9HNpfHw/cfwt+vAP7463fh+iveYtP2ucJ1CaBWsKeimhwXtyrXY4XARUVxyGW4BGjL4PH+vdiSkPEwS+EST2sQ3kuAhYpqKq+1Mcp9qRzD3Mx+fOSexzGSjOFL7z7f8G+8fNMAsB/4txteD5xiTlW0+P4+Nj6aUYln0ilkzrwG+Cnw2atHgDPM12G6UEYkUUe1Ge743BAh79esUKpjLmHfKyqby+OLk0/h/nUN/NvOaaxosuyxIcwdfQpv2bbDtNBMHSvANN5MOgUcXI4bNg7hhtcyUMldQs94CJSPiwg1VGTrF7IovbR/gWzoSmnGnl5qVrhoArVXuxXUDcXjyrK43ZxyWamoJodcGypK+xh7WKhhUQqxpeJpcvttIVX45gCwp6I45jaby+O3+SbiWLCnVhjlal84Y+KjqVwems9mL4wkY4gEaqjI4Y7PjeV6v2baXlFa2kg7BrrHjs6RNT1SsnmFTcGBhTDKi8dM04RV8JwHgJ2K6iJ6RiFQHjQSqKkegl2aHderaVKZz0MA7Befx+Kmcr225HnkNsoABCBgEbyjsKGitNWs0UAN1WaYLRWPi34oe09FqbyxvVzaApupvTjjmnG3wFY9BIaHfxgL9MbHRhEX66hpPHHPWlUzrpm2V5QZL0/3WFTJ4KrKIaY99psXJN0DRIDJunXrnHURPaMQKA86EGqgasPDOno1jZd+ADy9XFS5Ns8GZnN5fPqnjwAAfv9bj7MVvzDHPJQ5sMvIAmypKO1ca+M+tql4vPTDSVTi00rmzoBYRACtOoR8odxZrcq4F+g+rwYGMBgs2vPRUpkoZrv2HRQMeyGTTmHz6jCagahlWiatzt4yQfbjrr377H8/45pl0ilcf/G5AGDKy2tpZADMe2xaKdALCXXd5x3V0E7P70lEz8QQAIWnOxwFIsux83Jzns7Rq2lcCoGxnTK3haFQUSapedRFfmuCKLgX5ppsjb9CSWCR8bCyjpWO12QO6BoA5MDS7BrbVDwe+oEnWM2abcWxZlpaIyG20joBg4ZpHAH7TDoFlE8Hjh7Gzj+z4aOdrBnD3K7qA1b1rcS+G641/Lq2wV1YIH/3jt3PYt+wDYfPMd7Xqr2izjHsFUX3WEQgHYirjHtMUNtXFHFcSrY+V/4udfxOzi9rJluX0DMeggqGS4C63QsSKSixfTWt2SDpqZ57CBxZOwxyW5lWxLKpyBw0DHPAjyN32kKutpqVxH3CbKl4rFlRstwlr479EhgfG0WJ0hoGrRB0a9Mt+qHp3ZrpYLMXtJRgTQ6h3IwgLizY70We8dqsmUojU4Ugh5j22GXnbgIAXQYTYFAN/TKkjJakhyAIwnUArjv99NO9F86Q0659CHxe6iNpgW+0cbsBzzZqSy5HwK9drkHHxJaLrLeIbGkY1gI9Hk5eK9cA2jWIBmoIBBlT8VizotRsIK/XjH0vZNIprF44BzhEFIJRM3B1bbgTAZSsKLlpXdDH6yGEhoAyy/sCZUBcbfrl9j03x9LgrimRVGyPlDjdS9vvex4A0BfrZ3od8aJNG4FpYyWuG7+TNbNpW95tLEkPQZbl7bIs3zg4OOi9cEaaIJNOYefWKzAwsBzv3Jywd2OB7tEPzB6CtVxtphXQ4kztXOQnjgmA3MDZf3ObzWMgvJeLtYtM12DTsiCuOHsde142S1aUE3ce8JQyAoCLRzcCAIZE44yzaCiAS7btwD9szwEAtj85Yyszm8vjn399FICMsVv+y6YJXXcoIzuuv33P0awoy73InYZtT81m0il86482AwD+6T2vYdtjilxt9hKFbvzKXrjzyRm2x3R4X+brApakQugquA8Ag7XJrRDos4FdCCpbyNVmWjVlATU5aOsiZ3N5/GgXsYQGgjadGHmCtHS8XhemscrlXbNgAhBEz2m+Hc8T5ZwQFwy/Xq43Cc+tZMLclN1jecFTbv7gIskaKi4eta9U9npuAdtzZtTgbihk0+COd83EKPmnG9l8AJZHbBrcKef3b+94zj5FVSP3ZNJGvkKwA0vHU15LXmmQ5bW1aed50AyU5bGmkmkVt6VhJiancKymPDYSsKl8lThqMQCOVhucPDdLPQbv3AoC23g5rdivPnAMAHTvYxghItTRkANYrFt37WzvTDoo2nQm5Y77JBUqyjyTDYAt19/e4K4W6MdZy5qMnvhJ3guKh/DeCwetG9wpcudq+mvWdD14H2LqApZkDKGr4LWIggl7zpTXkqdyJZvCNF4XOahkqVjIJRkrq4D9cfvmXCCc6KZ+8vtpx036eQd4+sHQ8Tbr9pwp75qFEkB52vp76JrxeDTBhH0xYYNvLzxfEIAUEBeMG9xRRJRaDMA65kO/VmySdYgp7a0tK5V59y2UHltW3UEb9muma3D3wL8Dhcetf7fTc2ZbAMq5F5Rzdv4pIesz1Kyg2gxCNrC7DdeDnl+W3mldQm95CGo2ENullc3lcc+eIva9dBjnf/ZupD93tzEPyGm5ZHN5HJwPYPujz1pyio/vJx0ut2zbyfSK0vanSMXlzXc87BnXP5KMoSgpCkEs6z53IxcAkwLjzgYCSKfRRmfAT4v7niIN4G78jyfZX6gKJmzl8lanDvYTmiAu2igEoa5W/lrx7PRr9N2EPkUhWFYq8ypFgG0eGNaM1iL88PEZHJk5bh/vALj2QqEewQNP77fm73mTN2g767rNHEgV1GBc8Ge4HiHGue0iekshcGwoysUer4YQC1RQKNcxW6ob84AcljyVO9+IIBaomHKK2Vwed+0iuf/VZsi2Y2Q2l8cnsnsAkFewrLl+9qrq8bFRNJVWzvRyMY078HL9tFbCyiJqEo6d20OwkJnN5fGN+54CAFQY5lY3XuZ2I2zj/cjYuajLrYdqzBANVFFt2qfeUm6eKoS4WLapVOb1mOmaWVxajNlA2vYkpWYUEdh1ZuWjZrO5PPbOyhCkIluLCR7KV4zZe/hSGaFQ3LKTrQ4iw3noMnpTITAsPOViS1LU8LA6zRGncotSVL1gjTjFickpBJSNytKddWJyCqW6jKIUVWkCL7j+TDqFv7zyPABE0VhWvvLy0dTatLK0nPDGNpY8eYGMfW5Z5QLgVgiZdAqymMDKWAMCgGQshKF4SOWl/+jidUglY4gIdUhCxDbmQ7n5/j7CR6cSTeuf4a1DYKE1GFN6tbUIRSmGuFhBud6w78zKuHcnJqewKEXRp/G+PGkxAZB5YPAQotG4ZSdbHZaAh9BbMQQODlLLxZKLWwYgGH6PE7mlZhTDwfmOz7X/H1lFS+rtu7Nq5fYFytbfz0kTvPlVG4Hnga+8YxNwugVn6oTrB6wPgOP4TNm0MymJiyj9azQdOW3rMYIJoHjc+nscjDcc7cc71yfxzvcZV/UCAO7/KrAwhLUMaZGZdAqZs64CbgM+ObbOsjOpY5rPUomzzYF2vkvNKEKChLDQsIh38HH904UyigNRnBI6Zvp7ecarA6txIEb1sRI7mYBPGZ0wcFibWi5WFJpq7r7R9ziRSxSNOSc/koyRCt1mGFpFZMYFa+VqPRrD7+eldkIMlwDg/HKxVAic7rxWrolLP6JY3AB0HTlt22KwXgKCyNbgT8FCI4p7dz9vz3NzWPJ3PDkHANi2/RGPa0fs14xSnX9z+x7L362dbxoEjwfKgACbjq/s8a9SM0ZkmvxeJ3IBKLTkohoDMY0tcnlfCmVkd866iN5SCBxcP+Vii23BOYqQKLR4QM52BZTjjVtw8uNjo4gHG7q3G6y4YK1cW67fSZAWYLaImMGjEJzw3CYHa3xsFP3KC2RVmxfIdAixW4WsyOby2D8nICAt2vPcjHJpPEmSA4gHyva1Ix6uWTaXxxfv+h0A+/gMfdkMAEpNEnztC1Qgy8D4j3dZtJNmj39VEdedXcN1lipAIMz2RCtFMIEjs8fVGIjh2vEG7AMh0nXW9xBOEDgfrLj5+s2oqJaLXiH0hYOOmlhRuUKo35KTz6RTuOy0PtSFiD33qJFbF/oQD5RtuH7O9FAaRLPaqGo2kNd8tMMYgoXcTDqFP7hoJQDSR4f5hSqmFEa+C5by3NqUXkOemyGNUyuzXG+i2LSOU5HxOkgVBkz3wsTkFGTlPNB3R8x+N33ZDABKbWmyhq+bccaTMukUtmxai7hYsT5DvEoRAIIJHJ45rsZAKPSxRU4KFbBNiOg2/BiCBTLpFO65i+bgt/VeKWta3zqQC2EUeOa/LPOY1ydFoD6AfdssuOV2ubMjQH0OO99nxfU7OQA2qZzNGrie+6QyAWu5nHn9AJhojQtSUeBFYOffXgtEV7LJpVlGVv2BeN7FAOGzS8koVgZnOj7XoVkBxBXMMgGg3Izq9m2HTLlJ1s3DNZsulHFujPbKso99FUrkHLU8cYvxOuD6zxhZDRyvY98/XGVO4zm5uIN9CDVLhl/S9Z+KLOOTy5Ay3U34HoINBOVy6WvLE5cBpD93N3EPnfLctCjLDLxcP9AVWgOAfVaFkzlgiU3wFucBXaSiNEVZVnI5ZBKeO9pRh9D+stf+IzO488lZppqJVjxJn2HTyZ3zPfeZzeXxpn9+FADwtbuN39KgsS8AujeV7WJfJQNPvH0OvqRQUdd89bdsdSOAxjiwsLp5qR0ACCbQH6oafmkwpigezvObzeWxryDg5znr2Es30aMKgb2A7HiFLK5R6ulsqY7xH+/CM/kjitwuXFo87jyV6zGtocq1yrt2csGyxCbcxBCY5HqcJsuZxtniuVtKRstz01x9Ua6i0gwz1Uy04kkxlYIx5M458u/pOPbONgEA9dqC4TjGx0YxECI0it3LhPT7QwGhVUinKDBtjI7+7kqV7L/9s022uhGA/ZzxtFxR5C6P1NQYiBbFWqNlKHLcNTfdthtzjQjiok0dURfRowqBnYudb3S6slrUJRkP732RBINYXgqjYEq5dHhxM1WROlA0TJY8h1wxTIJ53bq47eQKAfJ2gtdyOdYsk04hvWENEmLVkOduvWFRY66ZoPGkhkACqpbcOcB0GdJxyAigqNTmGI0jk07hLy4ZAQBU5QhT7GvinedBVM5DPFDGUDyEiXecZzAHrTRsproRgF2J83oIoQQiKKkxEC3U+AfHXtDWJ8Xt4j5dhB9DsMB0oYxQmHxvzKKStFEvOru4ARtX1gm3yaAQOAKUKuyoKCdcP2Dv0TjNEQfs5QaiDpW4t2u2cWQ1UKhg381v6RgP5aOjgRpTPQpFJp0CCmuA6jHsvNEknsSR199eM0ANJKNxvHZ9HDgE3PHhNwHJc21lZ9IpZEavBrLAP7/jDOD0qwx/dzRQRa0ZRBOi6e/uAEt7FCfnQal1mS9VABjXuvDshVYdUQzJ4NGOz08UetNDYLQGKL8LdKadajEUaToL0gL21iY3t9lHfq7ZMP66LDuziGyDyg6oHRa5jrl+2Mc8eMfKSnE5mQNZalX4aqB9w0JbRGdbM0HlejS32t+nTZk27WnFKFeFhffVmoO6TikyzwHAQPM5O7+nDRlfoSPJGNf51dY9xS3qk7qN3lQIHHnMtI9Pe5aRFqJcRUliL0QC0BX6QS+30yLK5vK47B/vAeQm/nXnNB8/aeF5ZHN53PjtBwAAH/vJM57JBeAwYM/Sb8dhwN5CbjaXx9T0Udz77BxfUNBCgZF4QACRQF2ljJhqJuh4LcZ6wzfvBwB8Ivus7Vi17xfQWhfLOhfAs9oR7Tse3HPQ5XP20ctHzHsVccjV1j3Z1hF1Eb1FGXFasZl0CpC3AM9AOQABlOvNju8TmlW8tAj8LmfzQLgW3bJitZdWuPXiHA1aBSTyEMvREvBl7SPuLOM1OFRU7nlhInd6AfrH4VnkMvUy4glWR0l8oGvK1nwe7tigD/4CDPOgk7tc96VMOkV6Wk2RIG0qGcP42Kgna3ZWiHxtekG2HauWzy82YxiK1Kx7WgGcRVlB06Is+jtCDzdRbYb55qCbsToA15zZj2poFSYmpzBdKGOEju281cDTDb67BkDloYRan8T8N3qI3lIIDnjuzAXrgD0xfOTyEfx4MoK8AacXCVRRboYxMTnFrxDs+vg4Cf4CHR4CDVotE0lKYEWOqEEr9sul0+ugcqNRKjfMJ9cuNsH7XjVAeHhbz8PF3BooMHUeAjW1HQbzPNhcWm/bPAxMAR+/No2Pn2n/hoVuvFZrFiEUVaXJtmZqT54da4H6PLbYvTHOm7ljsRcy6RRQTAKzQ9j5J5xzAHTxnC0ik97UOW90j3DIzaRTgHg28MRt2PmJy/niWx6hxyijspINxPlnKwfLLMATVXoOcQWAmAOUzjeqFtrgJACmx1Y65NKiLAO5NPe84lSuGaQyWS+O3kBMchsu5tYgQKnOr1BFtRnp+JxJrtl4Gw6UIpXbrHXUurTG2jIOmMcKdEeJ0/F27Tx4LNfu/LqZA7taly6iZxRCNpfHrb/dg7lakL/oI5gA6gumAZ5ogCiEgCAwy71Teczmf2UfMhxPNpdHpVLEN37zokM+Wv9GLx17NNCyCrWf28LkAHTKjdjK1TYEu/vZIhaLFm/I0sPKay0pa2YrlwfKHHz5549i/dY7sX7rnWpxohr4DNTUuQVYA590bsl42xum3b2bNIvzyjhorZleiasFVSxyGzZzy9sbCMB8I4pfPmnR5M+FQvjXe3d1Ra7pPCgX+k93H8fGm36G9VvvxMabfoZPZndbit31IkkG2fKZ205KcVpPKATKmTZqRVTkCH/RR3QFUDnc8TC4+mWhioocgSTLTHKzuTzGb9+PajOI5cFCx3jIeH+HqEJFcY03qrQ3qBzWfUzHrrUKuYJWERu5gRZlZCVX+yiKDCBf7oNcPmzzCLyDTAtlzUzhQG72d7MoNyPok1stsGlx4uVnrlDnt8Ib+KRzq8xDe8O0r96jXCK8FIzFXggFBEQFRYkrHoJaUMUy3soR83eVHXhf2VweT8+QuTVt8ieVuecg+7ujWJDiCDeOmst14i2anAfdWAHc99wiJGWeJFnG9x48aKoUsrk8vv0oMbiWGdwLJwI9oRB0/G6T40EUir5TgeIB3cPgWvDKpY/ZvFhfgVT4SMfPTUxOodlQHnDhHW/fqeTfxQO6j+nY1wwQSzsR72dr6MYod3WcbPqh/kFLudpHUQDgUG0l+sUS/vfdjxr/XqcKIX5qx1g75HJeLhN3P4t8bQVSoSO6z+uSjPueOYqbf+9shAMNVJr2BVk69K0j/y4d6JgfdawA/zxYrFkiGuzwEAwbypnJlcpA9ajx1x2s2cTkFF6o6ue2Y887lHuothJrzOTKsrM9Fl8LQDDfY8qaaVOFKf7zoRdMx7qvTHofrTG4F04EeiKorOXPtf3vmTnTvlOB/HZAlnWPXWzYeidkB3Lp19svF/r5dKGMflHP7zKPNzQAhJKGGzWTTiFzytnADuBLf/BaYCVHBoPJ5ULlIrIWeBz42UevaqUQGqD9b8jXSGM5sWxysJxYb3S8B39k+kiOk0tgulBGfmglUuHOi3C6UEZm8zDwDPDRq8/DR8/mCXzGicVZPIDpwnkdX6YXt1cKASBN5aJxfTwJYNxjWrlGjQGdzm1kJVaFZhBEAw3latKNx6ncZMvw0n4OoNWUkdf7EsNA7BRzhaDEfSqaeBKFZOJZTRfKqAXJfBrdCycCPeEhqJypUOUv7gGItSlViJvsgVz69Xx9pW6j0s9HkrGWO+9kvH0W1rGTyl8AiK8hnLCdXJtUw/a/IV8nB2Dz0Jy5XN6xAmQO5AZQedEzuSPJGPK1lR2XC/2a47kF1DUzWmO6F7gVQvQU0prDYM20e4ylCV3HWAHrveBgbg/VVkAUmliteeFMNx4HFcXqmoWMzy7vK2w6MJwzraFIIZrEw0aSMRxrDJL0YoN74USgJxSClufm5ncB0wPgtGCG/ly+9n/bO/P4uK4qz39vVb1atFiSLcmy5CU2xHY2JwpOSAgJhDhxFkIEk4GwNd3MDMNA82mGbjdJkx5gBjphPEwDDQPDEqAbJgsQTNIEHLJAwHQcx3YWh8SOd7u8SLIly5JKqu3OH/e9qvdqkVXv3ZJKyvt9PvpIelU6dXTO3c5622kPDWCIlOPv1q1dQXNYBZfGKrnAxc7v6Jk2hAoHWcCAWOfEEyBglD6N21AYh7EshPefX8Yf7dZlNKlFqzK669au4Gi6ndbQKaIiX7mea8TmVrYWvyMHSsap5piX+VSus6BybZSQwbq1K2gIpchKkav+nfQYq5Js+7MdQN5dUsSPS7q9mQ6aQiM0BEaL6bpNkYXJbQglXEbvfeOisrxGDYN4Ku85mOritNfEhgAQCQXM9NAILXVGhf7zvI9XB13L7z5qdBEQku55w46/6+nu4tPXqkmXlOHK/NEWv2cwZd355c9AdxI07XEYAcQa55MWUVYVWAhWps2WPXG2xccqD6xZOvPIbyHvb+l+A0DObeRoxOZlQzBl23NRpyNOFRSCgFSbz2O7ylhRZbBhe5xtJ+aw5U/POTJWNmyPs37jToKMmwcZUdkYM5og1DjxYljhAtvT3cX73nYloGRbkh8XG0JPdxdvvdjSmVpko4Zt2fOqs9FDRanYAM/sPgw4ra+AgA9ctpgv9FxQlte73nUBJ7IdLAz3Vj7vNWDWxxCsrA0VVB6nP93MWIlq4wlR4kRk0R1PJc1AYrgiusqffz08sZ4HPtAJHU6lX7N8DuyDr3/wClhYgT/a4jc1BMlBCDc7X/N6iu1/uvRrFUzWokvH/3VJSdkmUhkirUlOJGOVVT9bvELpRcttIBFYfW43HIHH//NS6FzrfNHraTOTgPH+3P+Yk4Hp2rnr0QMMRyZXDW/J8Avz53F5wwu5jJVnD5zkZ1vjaj7Uqapq6xQ6adkKMfHpOJ3IpylXgGtXXwJ74Ms3NsMFJca8S52NGur/6jJ62Tl2FgOjqfx4WupxPmSTkDgGdZ25xxu2x/nD5le5dKHTQggGBKuXzJ2QZE93FyS7If4wm/5jhfNeA2a9hWDP2ggHUo5K2kkj3KyCtSMHi+jaL2uvmK61aI0eLH7N6+ICDn610S1zInJ1d4OFuiUOGdh1FgkkHVXVk0aoXt1WVUoG2RTqdjcPsi2lMy/WVwFduwysoPKpZHDSMrD+/nCqnQ7jBEEyJFIZ7t18yEHXXqVcMb+lZADu2qsDBCMqUFuKbu52t8rpfvkPakPttCUD5P5nN23bLZQZC+s37sTAmdILFWRx1S1R8UprPE0hZv2GYI/QW66dwueTQmwBjB0roltYkFUR3ZjymZI4Vvyal8UlukB9HytB14uFEFugArXjJ4tfc+vrt+gmimUL+SrwwueTQnSBfhlE56vvpXTmVbY2uoUyADXGJisD6319qbkEhGRuSLmb7Bku9poJV/OhlAzA21iIlqFbwd0NhXjpZISMDNAWchZAHhlMeJtnBTqz0y2VFJL7zDPhdR+Gm15SxX1TjFm/Idgj9NHAeOUVurk/nu8oQimq9pQu6IbqVcVjqeIWHYtWWbpCtfDQTdf1ImDK1lysnDpLatOZg1dwZyUFIxBuqbrOCsctqMVlsjKw3teXVi7DttCgYs2W4aLmw5kry8vyO96n0noL4TZV2KKrWbYdzQ2cTM/JycCCMzNM3zzrbI4V1Xg4PvNMqOuCpnPPmKBRDczaDcEKSsYHE1hTwDoRuYrcRzscJ4Giyt9s5XQ3bI9zKNHEQ5u3FZepuxyoG7bHufabyiz9xiN/KFOmX+HFMBaipkVT7tTtZoEFZSllxyGlTrH2TBurCtyVzmId+k/ywBCtPPn8C8WtELQsLopfhwwCSdIygGFEJi0D6+/70i0AtIUGEMBly1ocdMe9zAeZgeQJx+MN2+MMnB7iR8/2umu9EOvQbtWtW7uCE5kWh4UQM4JcvbKNTz+wGYAP/8uOynm1ajAK+F23dgV1weJ7pe3XgtYqZmVQ2R6UBJCAQBINJDHC9e4i91HnQLX+/udPqKrD+lgjd62dPF2Lxx8ubqItNFDcLtnF1ZH5/xtGuyKE073FwVgvvv6JXFyZxIQFaRMiaqMbbna0WlY6q/OmMymdG6CHxWXD9jgdA3U04GyxANDT7MEfHYqp7B1TtnYZRESSpIxUJIOe7i6ePXCSp7apRa7NGEAC2w6e4t+9oYsnX+kjIpJkAy4zWexjwVwYrfG3ZbmLpsFj5gAAH71JREFUFuAWoh2mtZh19kLy4Nrp6e7i+MHFZE4eR6BO6VevbONnW+NcU6d6ER0cOnML8CIEDIi0Fs2Hnu4udvU2M95nIM0zd0udwWdvPm/K21lXilm5IZQq/w+JNEGR5c+vPAfOd6GUWIfK3EmPqspSzGyZRRfAo/AP//5S6Jw8XYvHvlQLK6IqW8PRgtjFopX/vwV9KXUiKmpr7Mm1cwYLIdJa/HwyiNnoNq0ETNletADuTfGBN62EVS51lkmoBmTGHCev4EoO6zfu5G8bm7mwblfuWU7Gt3pwRVn8Fhw6erq74JmfwKGGiheTJ1/p42TKchkN5Hh98pU+Nt3+NthYB+G5XOxmkXKMhVWAvUVM3hVVUSt0MK3FFCQHVFKABY9W3fz2JcyX+9h3900AXHH3E7l2NjD5FuBFiJa2aJbPC8FQPfvNz5spmJUuo1KBG8u1430xLPBvuhyouaBf2mnK5nh34ee2/992ug55ePHvGnOUu6nchuBVtoWWh4dA4oR0PZw2jwwm6Es3lw5Qely0Ct2SObiU7ZHBBAkZ5XQmVn6MebUWbfPhyGCCEGlCIuuuRQyUD9rrkK1lLdp4staF8UpbgFuYyC3pdtxOI2blhlCy/N/qB+N6cSkTUHW5uFg89qebaQqNEDbTV4tK6iuga/+/+9PNtBqDRc89DVQhlBwSJYJ+XgOJoG2zrSZd1V6ghfrgWPHdtzr4LRdQdaEz+xizxoL9uRad2RbDcsHUigLWZzp4eZm/2WQuTpVvV+6yHbydru4ki2nErNwQSpX/N4Vdlv9bKOc/d7kIFAb9WkMDxSX1IljRxTD2/1u5jAa1lP87UMZE9kQ33KL+z0K6XhfYWBkXl4fFZd3aFQxKVVzUamat5GTs4kY+BzTL1j7GLAuhaIy5XWBDDRCsc/DraLlinrgrDlifSWea5m+lbdvLosDycPA7AzeEWRlD6Om/je7Lunjfix/J3XN6x1uXwF70+89dDlTLT7npd6rt87ktCd5+tS2457K1Aihfbl+6hbmhIe5+5wpu8Vj+70CsA4b3Fj/3QleI0ouhlxxxmMAV5S1A2T58MRyC9tAAmbpl+Srf7Ql3N/JZKBGnyvHrkleA4a2tLA7uLb6n16vOYh2O03FPdxd1yaWwh8rvPrZQTZcR5OJUFk+DT2fJyADtTY2sW7vSXXC9VJzKi/U1jZh1G8KG7XGWHjzBUHqY+GCCOiPAaDLNVza+zDVnw9MHRrhsiQvC0TZATDBQKz8V9nR30bN4LWy8k+++eyEs1Ldw95uWRyTdDyx10g23VEzP6n/zsfpxbmw+xO+2F7RQcNuV1EIp/7lL2Vq8Hh0cYdcFAfbsf5UVtoPftr1HuBi46sv/RqbuWMWL1pvOPx8OwYqmEbYeTeSqT3t0yADUIttQoDOXY6Gnu4u9x5bR2r+N+GCCT97/HJ9/+CWV8eKC3w3b43zuoZcYTKT46esijB3dwZ89/EuyErqaY3z+rWozXP+eN8JZlbde2LBjmBukwfc3bmL9P68kIyVdzTG+elmc1eBeviUs/J7uLpDz4dUom26/xh1d+6GjMHFhBm4Is8pltGF7nHU/eZ7jyaacOT+ayjIwmsr1g/nOH4+6u4EoYKish6n0c7uoQbBu27IKkr7zm6eL6xs80O1Pt9AUOMWdDz6Xp5tNqZx0T66oEr5YF7K185olwIl0My/u2eVo7Pbwtj0Ald9GZ+JXu1XrDpHsdaSe7u/t9y4DKB2nckl3w/Y4v3glw5zgcC5OpW55e67isWDNr8GEotOfbqbNGCBrekvigwm++fgO9YvLlN47fr4j5+60qqrjgwl+sXWPa7rAxPPMS/BX4/ytBcyqDWH9xp2kspL+dH5DsGD5CoeSIfc3EJVya3gOdpnFLaVOx5Xe6GVLt+1LKStgDiec/6+LxaWQbkBIYvJknq5XGUDpgiRPqbcKfekWWgJ5Xtdv3JnrHlrxbXQm/uHx/qJWCIlUhp3xXu/uOCg9FlzSXb9xJ8fM1NNWG7+BbOVZd9b8smAt3EW8VkjXTt9KxW4znFlcAS89h2DiOJUOnZWi62cZTS+slLH+dDNzQ0MEyC8MEdtdwq5vICqVYuaigMyBYATCc7UM1MK0U1D55zpuncrTVYtLu52uVxmAudn2OlshuKBbqNu+VLNDBkcGE7aGhBXeRmfi8GDSbIXgXLSyaa+nzQkWF5eyPTKYyB0O7PxGXNzCViRbM04VIl1M14Uc7PO3ULZu+HVABEwrtMT89TpuQesmPp2YVRuCPc0uKLK0BE/nXrOnw7m+gaichRAIuw8kQvnTsctUVlAyAFWhWpR26oFubqOx0/XqNgMlg8JWCC4sj0LdWhk2jtvoAuNkpSApQ2X/7kyf0ZcuPsU2h9MeF5cJ4lQuNxqLV4A2W+qpm1vYSskW1IXwebruF+58/6WWYgvfax0RlI9TeaEZmaeyAXVbHtOEWbUhrFu7AiMgcgFVe+61/V5a1/1EYiVSzHRkE2gaqPa003EZ5lS6ngXhweK00woXFzvdXvO02Rk5lafrNRsISp+0XGw0hSnHfekWWo1B1l13du71hlDKLJxS7SwqTTdUvXHmFvXGef28oDcZWK0QNC4u69auYDCj0mTt/DaGlJVUqWyNQL4FSKmNxvXtbjjTZOeFThG0WfgNoRRZznwj34Qol8nmRWeW5TFLLIQpyzISQvQANwHtwDeklI/q/gwrU+ShR18GVJ74ISNAxAjmTkSfuv5CbnDbTyQ6X5mY9hQzHYqPzocTzzifpRMQa6qIjD3t9MhggkE5l6uXSLqs/9flxTB2uidOKcvj/RdGOM+evggVBygtPjubY9x1ZYCrwBmcc0G3UAYpow1DZOg5L99uZO+xRpL9kVxfm0qzjHq6uzh4ZCnhE085aLT1ZiFY+cUwDpQLrrvMrunp7kLIK+GVfAyhpc7g7649C/ZR0eHAkpGVZdRfIjYRlEpn7/7uc7zvmpaK5Qqwe1MbASFpNYY4nmqhqznGNWc3Ehj2OM9i82Fgq/OZrvlr09mG7XHWJkb48R+P8P3Hn6g89XYaMakNQQhxD/B2oFdKeb7t+fXAV4Eg8F0p5d3laEgpNwAbhBAtwP8CtG8IYKZyLrsJfvk3/Pj9Z8HSG9QLr7wE2+CGi5a5J14qxUzLgNLjMoKC28geWwbSdu1i1uVl7YV0H2jkvLkFcYkK6BY2H4wPJvji4wNc9XqccnBpeTh4PTAMm/6P0pnZG2dZSwDG5+T62rjB4s5lcPoh9t11Y75x3iOJfNaJWxTGqbIZlcXlYYzdcvFS2DuXv76yib++xPyfT2xRG4JL2W7YHuefHuoHCmITpmtn/2C28mZx1ntb3wK//xqbP3U+tFykXnjmfkjomGdmnMqyNDIJiLRpoKt0psb2C7xj5TiJbMRdg79pxGRdRj8Arrc/EEIEgW8ANwDnAu8VQpwrhLhACPGvBV/ttj+90/y76iFmTsrx3vwzXX5ucC5aOrIJYh2QHoHUsJOu7o1GhwygeNGq0NdfqvngoTFzg/XoMipCqUCtDtnGOsxWCDZfd63rTCPd9Rt3ctjUmT3TKF/56+KWuxyREu5DXa7ZUnEqHfPX5HX9xp1k0uMEhMz1c3Ith2nApCwEKeVTQoizCh5fCuyWUu4FEELcB9wipbwLZU04IIQQwN3Ar6SU28p9lhDiI8BHABYvXjwZ9ophNKtAb+GAQni7hSg3UI/mn+laBCy6xtn66MY64MjRfPtnHb5+MBetAhlUQLdURs9oNsZIJkp9oWwroFsSsSnQmVXop2txsbfs1rUhRDucMvA4Fo4MJpCoOFW7kb9Bz3LNjru95Q6qpzM7XSvdW9smfhxkliODCRoDxbeluc5snGJ4CSp3AYdsvx82n5XDJ4A1wK1CiI+We5OU8ttSytVSytVtbS5NOSFgzgoYsO07luLdXAxjoWGpCvydLEHXC+aols9Ofj2mw1l008Nwerf63Wsud47uChh4HrJmALHCRatcRs+hzKJinQU8BhLrlyj/u11nOk6bls5OVkFnmTEYejlPE/TobPAF8z5pPI8FS4d7xxdyfmxP7nkkkCQrBePScLyvIsQWqj5JpeavF5TUmSa6Mg2DL9LZHCMSUDIez+bTml1nNk4xvGwIpVZWWeKZekHKr0kp3yCl/KiU8lsePndymL8Gen+fPwnpOL2F6qH1TXDsN/lnOhaXuW9Ql6Mceyz/TAe/HWvU9+MmXUsWOuimTsHJrU66k5RDqeaDMSNIYMEa6P9j3nWmY7IGo9D2ZqfOdNBtuVDFJAp15pWupTOLri4LoWONckv2b1a/e7QQLB3+YfgiLqrbSWNgBMjfwgbCXbM4gGAY2t9SrDOv47bpPBXj0T1/O8y2F8ceY93aFblGmpbLyLUcpgFeNoTDwCLb7wuBI97Y0YiONSqI2r9J/a4rDaxjDQxsh7F+fXQDQZj/NjVQpTQDiUnvdBtep07IuheX+WaPGpd0e7q7uOtdF9DVHEOgeuDc9a4LWL7qneoE2/f7PF1dOju1I+9C1EFXBGD+NUoGUrrO4CpC/RJoeH2xbL0uhvOvVjxromvpcCeXEhJZLm9QLSti5h3Ylk5dB1I71sDQThg5lOfXs86EonvsMXUjmy66dV0w5xw49hg93V3ccZ1qlqZFDlMML2mnW4CzhRBLgThwG/A+LVzpQPtV6nv/ZjUIMgkIeGg8Vkj35BbovMF7Uzc73cM/V1kQhpm6qGMCtF0Fx59Qv3toxOdAtE2dtk5sdk3XkQlkIT0XEEpnnTeYpzcNsm0zdXbiGVj4Dr06O/gAJOIQaVeLjC668YfVz7o28XALNK8q1pmHOdHT3UXPqo/DA5/m2zdl4MKb4OkH4WijupHNC9ptOqtfZDZlnDfx30yW7v4fw8gBtflmx/Xp7MD9AFyzfA7sha9/8ApY6FEOU4zJpp3eC7wVaBVCHAY+K6X8nhDiL4GNqLTTe6SUL1WN00phNKhWxOaFGNp6i1jXRCZtdD1M1js3vMi9mw9xc9NhvrIY/vFXz/Bfb7xcveihodn6jTuJDyb4+87TvKflJG/+/KNcXreVb3bBR//fn7j+6nO8nVoirU7ZuuS3sB7ht2fVY6S8y9ZO99LWE9zfiZNfDbx+5fIAl4AaC6FG9SYdFo0m2U6Krtc5EYyoFGxN88HCo7vTXAf87b1PsUm28OvXn6ax0T1dq0vrG40D/N+z4D1f/zUfuPZabgZ9sk0PKUtRV/LGNGCyWUbvLfP8EeARrRzphNEIKbN9hY6AH+Qnfto73Ts3vMiPnj4IwEhW0Xjsxb2kibIOXC9a9hz/4UyMhmCCU4lx0sYoAIdOu7hQvBChRnUyBlvgs/JWyoX1CCfHIySOHeMsi64GGewdDEAnPL/3EBcuNelWuBCW4vW7/9bHJYtRY0Hnwm00KpdhJql3cQk1Ot1muugajVrmg4UN2+N86VcHuW451AcSxE8kGBo+zcApiZu8Q6tLayorGTF5yyaH+PwvtnLzSvTJQGaVXHXKdooxq1pXFCHUqLJsQJ8/2rA2BO90792cT9IazigaDYEEv35+v3rooWNkId1YYDyXEjiW9ZAjbsEolG204gyuUvUIw5kYu4948/WXk8EfXtnvmm4pXk8mzSyS9LDeRSBkG2PaF26bziq8ka8sNM+z9Rt30j+uArJ1QXXYCIsk2w6PuaZndWm1Dl71wTGCVqaVDs+BpbPUaX3W1zSgJjcEIcTNQohvnzp16sxvnghGQ/7kousGo5Dp389ZHu5dURlbT6TRrDpd1wcShIX7gVqY72ynaxUNecoRtxBqcMrAhWxLff5INkog421xKaSbkBGyUpBNDrmmW652AnAuAloWbnOM6bY8QlWYDxZdDfPBwpHBBClpkMyGaDDvrY4Gxjkx5i792K67kUzxfNC6LujW2RSjJjcEKeXDUsqPNDVV1sunCKFGvSmMAIGQOg2nhz1fDBO0naiHs6rXTn0gQV2g8sZjFgrznYetE1EgkWshbKXDecqNLrIQvPMK6gTXEk5qpisYyUZpj6XNbKDK3RqleLVk6zjJaz1taqZrVGE+WHQ1WgiWrEeyMepyG0ISI1w30Z+dkZ6iqWjU6d4QjCpZdVOMmtwQtMHh29R5ImrUcip87xvzWbt5UzbBjec1uaZbmOM/aqNrdxl5zo0ONajBL7OuT5ul6hHGZIylTbaUQBcLYSm6o9k63rjIcF3oVYpmJmCzFnX6+g1bnEq3hZAdVwcZrfPBu7VohyXrkWyMhkCCIBkMkeGS17mLd9m7tFqbeEMgQUOoChuCbmtxijHr7lR2INQAIypoq/UGI8v09rgIfKHnAkDFEkZNU/aqpTFuvGwB/M4dXXu3z/hggoR5IuqIpWiJKB/43DlNfGrted6yjHKL1oinRnwWr1bmzuu7FtCcNZPVNNKtq29iflPW9WQtRfPT1y6HnVRn4YbqxSasRUvXfLAfvDS4oixZJ5+voz6YUM0IgXMWzfdE73MPvcTImJpnrdEkn7x8ERxEv85me5bRjIVmU7aIrobJ+oWeC9TGkE3DfXDjygbPdB05/v1t8Ch87/3nQP8A/CnIU7df55rfHAoXLR28Amy+D+K2XHlddH/d4tm1U0RTStgpnK4d3afN3OKiIVfe0KOzIljWImij29PdBb0dLDMauP5Nl8KDeKLr0N19YT5+ZQe0N2jcEHwLofah2ZQtoqtT8fbYhAa6Vs58LLGLx1bAllcPcEmjZrcZeDpt2uslBKrvyWcW9PH+eYNc8d8f5amlp3lkWz8RI+7amrE+48tzx4mGDtEX28e1oEcOQuSsxS174lwCXPe1ZxiJDXnrgV+42QYi3m7ky9Et0JnOA5LGeWbp7EstYzSHTxFv2MdaqN781RKfUTrbtvcQL7zyMh+cE+Cq9b9n3dqVM6ZKGWZ7DCFkmrIyq68OAfITQHd6WWFswiVdK2c+PpjI+Uwf3rqTfcf79coA8u6SCunaeYR8EywVSBxjcHScaCBJ/1iAOx58kQ3b4xWzWCgHQ47wT79R9Rc65XDg2DEe3KIaCCZkvge+G56B6i7c4FpnZRGy1U14dEWV0tlXN76gXqzW/NVoIfx6+6ukkiOMZcPEB8e8jYNpwOzeEIxGlQVkVWfqnADVyCYodEW5bCtgz5m3YhOGHOXlw8f1nrIg7y7RkNcPMGLWDDQGRzFEhrFs2HXNhP0zRjJ11AUSiCrobPeR47mcdqvlsac6j8KMFR3uIij2c+seCxo2GqfOYtQHxvTrrBrz15SBwShRYTX4m1l3IUCNbgja6hCsgTrWp75rWwQaqpNvHCqg6/Kk5ci7tqWdZtOaA4mQD65ryOuHPL/zgkr3Y2YLYTc1E045RGnQnWoIEGogkDlNJOC8B6Dw8ytCMKZcRNWyEKpFd9y8eMYD3cKxa0+X1j7PdAZ/g2HGzbqJqNngz8JMuQsBanRD0FaHYA3UMfPmNG0nLTOfW2fAD2ymrJ5e9QAZgoxlw9QFEjSFM3oa/EEJC6EyuuVqIEbMQrp55i1cXvrqO/PPlSsqKqzFRd9YaAkniQizB77MLwSu6zxssQk3bTbKwhGbGNNveWiYZ8U6SxANWFe/6pxndgtBD92ErMttYGM6xsE0oCY3BG2wfLHjui2ExipZCDZTNhB2HUgszJkfzsZoNsZY0Raqjj86W3l8plReP+QLh+aF8haC25oJ+2eMZGPUB8doCrsv+isJo5GzmrI0GinHxTDe6zwaq5ANVG0Lwfs8s+tsOBsjEkgzL6zpkiALufmrl64RbWJOSB06LEtxJt2FAK+FLCPID1SdJy2Zyd+nq9OUHTng2b9bmDM/Th1XLInQHhmCgO4YgjuXUWG9hJVlZLUWWFinLlypizVw13Xu+snbP2PUjE38xeoGOIZWnTUbY6xZPodkfxiBoLM55i3LCJRbUvvCrc/X70DhPNM0dq3414ctnemcv5ZsRUhl+GlAfV0Tly4yONSbZiwboUvHOJhizO4NochlpPmkpZuuoe9U6Mi7fqQNGrIwmlCtinVAQyCx5J0IJ9ph42f4+zWt8AJ87p2rYZH7CZX7jFdfhS330N2e0ru4mDo7e0EQhuvZd/dNeuhaFkI6kR/HXhGsM2MTw/oL00DbfMjpbM9+2PydvM6qYYnrrBUwGukMZehcHAPRwKb/NLPuQoDZ7jLKDdQquIzsdKuRdqp5oGqnGzDdT+MnAalXBlB9nVWjjUmt68yKTaRO6bmRz8JM05nd5auzI2m1xsIUYnZvCNZA3XuP+q57oFaDbmpQ3Zyme6D2bYKhXfoXrZki22qOhcyoujlNp2xDjep2s6E/6ae79/vq52rpTPfhoBo6y6bUzWm658PAVhh8fka2vobZ7jKqXwzn/Z26lzUYhZaL9NBtfyuc/XG1eNcv9ZylkK8qXsjHOq4nzBi/27eKn/z+l7TUGXz2Zo99h1Z+Sl0unk3Csr/wxKsDq76o7j+WWeh8ux6asU44/+9heD8EwzD3Da5J2W84W94i+eaqP2dZUwrqFuddXl6x5Db2H9rJrngvv91/Dr/70xN6/MYr/kpde5kdh2Uf1sMrwKr/Ab2/VTrreocempE2OP+zMLxX6WzepXrotr0Jln+CQ8cO89Rhgzs/+0c6m+u8y3fxu9l/4CV2xY/z1MAKnrxbk86Wf8I8IIzB0g95ozVNENLWk7/WsHr1avnss89ONxtVReFNXKVgBAXrb71wRgWnphul5BozgtovPJ+qz3mtohryne06E0JslVKudvO3s9tlNANQrmLXjlRGzqhqx1pAKblWo2p0qj7ntYpqyNfXWXnU5IagrVJ5BmCyVYwzqdqxFlBOXrrlOFWf81pFNeTr66w8anJD0FapPAMw2SrGmVTtWAsoJy/dcpyqz3mtohry9XVWHjW5IbyWUK5i1w4jKGZUtWMtoJRcq1E1OlWf81pFNeTr66w8ZneW0QxAYVVxU8wgmc4wmlLXSGrJMnoNotQNZ9WoGp2qz3mtohry9XVWHn6WkQ8fPnzMIvhZRj58+PDhwzP8DcGHDx8+fAA17jISQvQBB1z+eSvQr5GdqiIQmzNXBI1FwYaWkMykk5nhk/FsYuikDrrBhrldIhgKe6VbjpYwoktCzR1zdHxGNeDgO5tNA2THTocCkfqa43USmFHj2oTP89ShFaiXUra5+eOa3hC8QAjxrFs/2nRhJvIMM5PvmcgzzEy+fZ6nDl759l1GPnz48OED8DcEHz58+PBhYjZvCN+ebgZcYCbyDDOT75nIM8xMvn2epw6e+J61MQQfPnz48FEZZrOF4MOHDx8+KsCs2xCEENcLIXYKIXYLIW6fbn4mghBivxDiRSHEc0KIZ81nc4UQvxFCvGp+b5lmHu8RQvQKIXbYnpXkUSh8zZT9C0KIi2uM788JIeKmvJ8TQtxoe+0Ok++dQoi108TzIiHEk0KIl4UQLwkh/sp8XrPynoDnWpd1VAjxjBDieZPvz5vPlwohNpuyvl8IETafR8zfd5uvn1VDPP9ACLHPJuuLzOeVjw8p5az5AoLAHmAZEAaeB86dbr4m4Hc/0Frw7H8Ct5s/3w58aZp5vAq4GNhxJh6BG4FfAQK4DNhcY3x/DvibEu891xwrEWCpOYaC08DzAuBi8+dGYJfJW83KewKea13WAmgwfzaAzaYMHwBuM59/C/gv5s8fA75l/nwbcH8N8fwD4NYS7694fMw2C+FSYLeUcq+UMgncB9wyzTxViluAH5o//xDomUZekFI+BRQWbpXj8Rbgn6XC00CzEGLB1HDqRBm+y+EW4D4p5biUch+wGzWWphRSyqNSym3mz6eBl4EualjeE/BcDrUiaymlHDZ/NcwvCbwN+Kn5vFDWlg5+ClwjhBBTxC4wIc/lUPH4mG0bQhdwyPb7YSYenNMNCTwqhNgqhPiI+Wy+lPIoqMkGtE8bd+VRjseZIP+/NM3ne2zuuJrj23RJdKNOgTNC3gU8Q43LWggRFEI8B/QCv0FZK4NSynQJ3nJ8m6+fAuZNLcfFPEspLVl/0ZT1PwohIoU8mzijrGfbhlBqx67lNKorpJQXAzcAHxdCXDXdDHlErcv/m8DrgIuAo8CXzec1xbcQogH4GfBJKeXQRG8t8Wxa+C7Bc83LWkqZkVJeBCxEWSnnlHqb+b0m+C7kWQhxPnAHsBK4BJgLfNp8e8U8z7YN4TCwyPb7QuDINPFyRkgpj5jfe4GfowblccusM7/3Th+HZVGOx5qWv5TyuDmhssB3yLsqaoZvIYSBWlh/LKV80Hxc0/IuxfNMkLUFKeUg8FuUn71ZCGHdE2PnLce3+XoTk3dJaoeN5+tNt52UUo4D38eDrGfbhrAFONvMFAijgj8PTTNPJSGEqBdCNFo/A9cBO1D8fsh824eAX0wPhxOiHI8PAX9mZjdcBpyyXB21gAL/6TtR8gbF921mJslS4GzgmWngTwDfA16WUv5v20s1K+9yPM8AWbcJIZrNn2PAGlT840ngVvNthbK2dHAr8IQ0I7dThTI8v2I7LAhUzMMu68rGx1RHyqv9hYqs70L5Az8z3fxMwOcyVLbF88BLFq8ov+TjwKvm97nTzOe9KJM/hTpx/IdyPKJM1G+Ysn8RWF1jfP+LydcL5mRZYHv/Z0y+dwI3TBPPb0aZ9C8Az5lfN9ayvCfgudZlvQrYbvK3A/hv5vNlqA1qN/ATIGI+j5q/7zZfX1ZDPD9hynoH8CPymUgVjw+/UtmHDx8+fACzz2Xkw4cPHz5cwt8QfPjw4cMH4G8IPnz48OHDhL8h+PDhw4cPwN8QfPjw4cOHCX9D8OHDhw8fgL8h+PDhw4cPE/6G4MOHDx8+APj/SUXUOdA0CC0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(range(N), ozone)\n",
    "plt.yscale(\"log\")\n",
    "plt.plot(range(N), np.vstack(np.array([np.exp(x) for i in range(k)]).ravel()), color=\"orange\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 890,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  after removing the cwd from sys.path.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  \"\"\"\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x12b1d0b38>"
      ]
     },
     "execution_count": 890,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12aeb8cc0>]"
      ]
     },
     "execution_count": 890,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = mols_solve(As,bs,[1,100])\n",
    "plt.scatter(range(N),ozone)\n",
    "plt.yscale('log')\n",
    "plt.plot(range(N), np.vstack(np.array([np.exp(x) for i in range(k)]).ravel()), color=\"orange\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 15.4 Regularized Data Fitting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 891,
   "metadata": {},
   "outputs": [],
   "source": [
    "D = {'ytest': np.array([-1.05772   ,  0.879117  ,  1.98136   ,  0.867012  ,  2.1365    ,\n",
    "       -0.701948  ,  0.941469  ,  1.49755   ,  0.550205  ,  1.34245   ,\n",
    "        1.21445   ,  0.00449111,  0.957535  ,  0.077864  ,  1.73558   ,\n",
    "       -0.325244  ,  2.56555   ,  1.10081   ,  2.70644   , -1.10049   ]), 'xtest': np.array([0.396674, 0.777517, 0.1184  , 0.223266, 0.901463, 0.358033,\n",
    "       0.260402, 0.804281, 0.631664, 0.149704, 0.551333, 0.663999,\n",
    "       0.164948, 0.651698, 0.123026, 0.337066, 0.083208, 0.204422,\n",
    "       0.978   , 0.403676]), 'xtrain': np.array([0.10683, 0.25578, 0.27112, 0.30299, 0.50204, 0.65845, 0.68423,\n",
    "       0.70259, 0.73406, 0.94035]), 'ytrain': np.array([ 1.82422  ,  0.813549 ,  0.92406  ,  0.42067  ,  0.446178 ,\n",
    "       -0.0373407, -0.210935 , -0.103327 ,  0.332097 ,  2.29278  ])}\n",
    "xtrain,ytrain,xtest,ytest = D[\"xtrain\"],D[\"ytrain\"],D[\"xtest\"],D[\"ytest\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 892,
   "metadata": {},
   "outputs": [],
   "source": [
    "N = len(ytrain)\n",
    "Ntest = len(ytest)\n",
    "p=5\n",
    "omega = np.array([13.69,3.55,23.25,6.03])\n",
    "phi = np.array([.21,.02,-1.87,1.72])\n",
    "a = np.vstack(xtrain) * omega.T #J: xtrain*omega', where xtrain is default vstacked\n",
    "b = np.ones((N,1)) * phi.T #where in J ones(N) is in N,1 form by default\n",
    "A = np.hstack([np.ones((N,1)),np.sin(a+b)])\n",
    "Atest = np.hstack([np.ones((Ntest,1)), np.sin((np.vstack(xtest)*omega.T) + (np.ones((Ntest,1))*phi.T))])\n",
    "npts = 100\n",
    "lambdas = 10**np.linspace(-6,6,npts)\n",
    "err_train = np.zeros((npts,1))\n",
    "err_test = np.zeros((npts,1))\n",
    "thetas = np.zeros((p,npts))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 893,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  after removing the cwd from sys.path.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n",
      "  \"\"\"\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "#recall mols solve from above:\n",
    "def mols_solve(As,bs,lambdas):\n",
    "    k = len(lambdas)\n",
    "    Atil = np.vstack(np.sqrt(lambdas[i])*As[i] for i in range(k))\n",
    "    btil = np.hstack(np.sqrt(lambdas[i])*bs[i] for i in range(k)).ravel()\n",
    "    return npl.lstsq(Atil,btil)[0]\n",
    "\n",
    "#recall rms:\n",
    "rms = lambda x:np.sqrt(np.mean(np.square(x)))\n",
    "As = np.array([A, np.hstack([np.zeros((p-1,1)), np.eye(p-1)])])\n",
    "bs = np.array([np.hstack(ytrain), np.zeros(p-1)])\n",
    "\n",
    "for k in range(npts):\n",
    "    theta = mols_solve(\n",
    "        As,\n",
    "        bs, \n",
    "        np.array([1, lambdas[k]])\n",
    "    )\n",
    "    \n",
    "    err_train[k] = rms(ytrain - np.matmul(A,theta))\n",
    "    err_test[k] = rms(ytest - np.matmul(Atest,theta))\n",
    "    thetas[:,k] = theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 894,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12b228a90>]"
      ]
     },
     "execution_count": 894,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12b30c2b0>]"
      ]
     },
     "execution_count": 894,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(lambdas,err_train)\n",
    "plt.plot(lambdas,err_test)\n",
    "plt.xscale('log')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 895,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12b25f400>,\n",
       " <matplotlib.lines.Line2D at 0x12b4b4cc0>,\n",
       " <matplotlib.lines.Line2D at 0x12b4b4e10>,\n",
       " <matplotlib.lines.Line2D at 0x12b4b4f60>,\n",
       " <matplotlib.lines.Line2D at 0x12b4a30f0>]"
      ]
     },
     "execution_count": 895,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(lambdas,thetas.T)\n",
    "plt.xscale('log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 15.5 Complexity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "m,n = 100,5000\n",
    "A = np.random.randn(m,n)\n",
    "b = np.random.randn(m)\n",
    "xdes = np.random.randn(n)\n",
    "lam = 2.0\n",
    "%timeit xhat1 = npl.lstsq(np.vstack([A, np.sqrt(lam)*np.eye(n)]), np.block([b, np.sqrt(lam)*xdes]))[0]\n",
    "##this takes excessively long, might want to look into what's causing it to lag so much"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 942,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "41 ms ± 4.36 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "%%timeit\n",
    "Q,R = npl.qr(np.vstack([A.T,np.sqrt(lam)*np.eye(m)]))\n",
    "xhat2 = A.T * npl.lstsq(R,npl.lstsq(R.T, b-np.matmul(A,xdes))[0])[0] + np.vstack(xdes)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "npl.norm(xhat1-xhat2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
